顯示具有 WIN32 API/MFC 標籤的文章。 顯示所有文章
顯示具有 WIN32 API/MFC 標籤的文章。 顯示所有文章

物件導向之回傳this

沒有留言:
最近在ptt上看見討論串
而且討論得還滿有結果的

之前也為了這件事查半天(突然忘記怎麼用了XD)
就來給自己做一個小筆記吧!

.txt 檔處理

沒有留言:
在.xls(Excel檔)裡,有一格一格的
在.csv裡用\t和\n可以讓它一格一格的,x軸和y軸都可以定位
同理
在txt檔和.csv檔骨子裡是一樣的,不一樣的是打開的工具

而今天,我們用MFC來開
如何coding來開這個東西呢??(至少要能讀.txt檔吧?)

MFC檔案讀寫、相對應的例外處理

沒有留言:
檔案讀寫類別

CFile
CMemFile 好的執行效能
│└CShareFile 記憶體中,可以共享檔案
├COleStreamFile
│└ CMonikerFile
│ └ CAsyncMonikerFile
│  └ CDataPathProperty
│   └ CCachedDataPathProperty
├CScoketFile
CStdioFile 有緩衝區 標準輸出入檔案
 └CInternetFile
  ├CGopherfile
  └CHttpFile

可怕的繪圖資源異常Bug

沒有留言:

上次說繪圖出現問題的bug
抓到了!

真是發生奇蹟了!

RawReader by MFC

沒有留言:
突然想寫個RawReader讀取*.raw檔
就來用學很久的MFC寫一個,完成研究所原本想做的事吧?!



用VC++6建立一個Single Document

Microsoft RDBMS

沒有留言:
下列RDBMS(關聯式資料庫管理系統)從最早至今,依時間排列

DAO(Data Access Objects)一組COM元件的集合,適合存取桌上型資料庫管理系統管理的資料

ODBC((Open Database Connectivity)存取client/server資料庫的通用介面。
RDO(Remote Data Objects)一組COM元件的集合,利ODBC介面存取Client/Server資料庫的資料

UDA(Universal data Access,統一資料存取介面)程式可以存取任何型態的資料
OLE DB實現一套程式存取不同資料來源的COM介面。
ADO(ActiveX Data Object)是UDA理想的實踐,讓應用程式使用效能好的OLE DB這種最新的COM資料庫存取資料。

絕版書~入手!

沒有留言:
 傳說,要學會Windows程式設計,要會Win32 API
 傳說,要使用Visual C++寫視窗程式,學會MFC會很方便
 傳說,要學會Win32 API和MFC,要買三本書。

在此,我買到了兩本,第三本...依然隨緣(不過我會努力的)

視窗更新畫面語法

沒有留言:
待畫視窗(排隊)
呼叫 Invalidate();  = 呼叫 OnPaint
Invalidate();

立即重畫視窗(插隊)
UpdateWindow();

字更新完要加這一行,才會顯示在視窗
程式→介面
UpdateData(FALSE);

字輸入在Edit上,要加這一行,才會輸入程式
介面→程式
UpdateData(TRUE);

MFC用在Excel(語法+註解篇)

沒有留言:
初始化
objApp.CreateDispatch("Excel.Application",&e) //產生一個Excel應用程式
objApp.SetVisible(TRUE); //繪出Excel應用程式視窗
objBooks = objApp.GetWorkbooks(); //取得應用程式的活頁簿記憶體位址
objBook = objBooks.Add(VOptional); //開新檔案
objBook.AttachDispatch(objBooks.Add(_variant_t("C:\\test.xls"))); //開啟舊檔(也可以叫Dlg出來用)
objSheets = objBook.GetWorksheets(); //取得Books的Sheet記憶體位址
objSheet = objSheets.GetItem(COleVariant((short)1)); //開啟sheet1(就是點一下Sheet1翻到這一頁)
objSheet.SetName("My Sheet"); //設定sheet1的名稱稱

設定內容
range = objSheet.GetRange(COleVariant("A1"),COleVariant("A1")); //選取Sheet的範圍(使用Excel座標)
range.SetColumnWidth(_variant_t((float)1.2)); //設定欄寬(像素值)
range.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("My Auto-Excel Demo")); //填入內容
range.BorderAround(_variant_t((long)1),3,1,_variant_t((long)#000000)); //外框
range.SetHorizontalAlignment(COleVariant((short)3)); //置中
range.SetMergeCells(_variant_t(true)); //合併儲存格
range.SetColumnWidth(_variant_t((float)30.38)); //設定欄寬
range.SetRowHeight(_variant_t((float)54.00)); //設定欄高
col = range.GetEntireColumn(); //選取某個範圍的一整排
col.AutoFit(); //自動調整一整排的欄寬
(列同理)

設定字型
font = range.GetFont(); //取得選取範圍,設定字型的記憶體位址
font.SetName(_variant_t("Arial")); //設定字型
font.SetSize(_variant_t((short)12)); //設定字體大小pt
font.SetBold(_variant_t((short)TRUE)); //粗體
font.SetColorIndex(_variant_t((short)5)); //字色(查表,應該還有更好的方法)

設定儲存格
cell = range.GetInterior(); //取得選取範圍,設定儲存格的記憶體位址
cell.SetColorIndex(_variant_t((short)5)); //設定底色(查表)

其它
char buf[200]; //暫存的字串
ZeroMemory(buf,sizeof(buf)); //清空記憶體
sprintf(buf,"A%c33",'A'+i-11); //用變數定義儲存格座標
strcpy(buf,"總計"); //定義欲輸入的字串

圖表
//畫圖
lpDisp = objSheet.ChartObjects(VOptional);
chartobjects.AttachDispatch(lpDisp); // Attach the lpDisp pointer for ChartObjects to the chartobjects object.
chartobject = chartobjects.Add(20, 140, 350, 250); //defines the rectangle,
// adds a new chart at that rectangle and assigns its object reference to a ChartObject variable named chartobject
xlsChart.AttachDispatch(chartobject.GetChart()); // GetChart() returns LPDISPATCH, and this attaches it to your chart object.
lpDisp = objSheet.GetRange(COleVariant("B3"), COleVariant("F6")); // The range containing the data to be charted.
range.AttachDispatch(lpDisp);
var.vt = VT_DISPATCH;
// .vt is the usable member of the tagVARIANT Struct. Its value is a union of options.
var.pdispVal = lpDisp; // Assign IDispatch pointer of the Source range to var.
xlsChart.ChartWizard(
var, // Source.
COleVariant((short)11), // Gallery: 3d Column.
VOptional, // Format, use default.
COleVariant((short)1), // PlotBy: xlRows.
COleVariant((short)1), // CategoryLabels.
_variant_t("Open,Working,Verify,Returned,Closed,Canceled"), 
COleVariant((short)1), // SeriesLabels.
COleVariant((short)TRUE), // HasLegend.
VOptional, //COleVariant("Use by Month"), // Title.
VOptional, //COleVariant("Month"), // CategoryTitle.
VOptional, //COleVariant("Usage in Thousands"), // ValueTitles.
VOptional // ExtraTitle.
);
xlsChart.SetChartType((long)55); //設定圖表類型(查表:圖表種類篇)
//調刻度
/*_Axis ax = xlsChart.Axes(_variant_t((short)2),_variant_t((short)1)); //2是縱軸, 1不清楚
sc = ax.GetMaximumScale();
if(sc < 5.0)
{
chart.SetAutoScaling(FALSE);
ax.SetMajorUnitIsAuto(FALSE);
ax.SetMajorUnit(1);
ax.SetMinorUnitIsAuto(FALSE);
ax.SetMinorUnit(1);
//ax.SetMinorUnitScale(1);
ax.SetMaximumScale((long)(sc+1)); //最大刻度
}*/

結尾
objApp.SetUserControl(TRUE);
range.ReleaseDispatch();chartobject.ReleaseDispatch();
chartobjects.ReleaseDispatch();objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
objApp.ReleaseDispatch();

參考資料:

流浪小築 http://www.intra.idv.tw/

MFC用在Excel(載入Class篇)

沒有留言:

以VC++ 6為例

Add Class→From type library→Excel.exe
(沒看錯!要用.exe檔來載入Excel的Class,Office系列都這樣....吧?)

在Dialog開新的Dialog

沒有留言:
其實,這就是模式和非模式的差別。
 「模式」開啟。
{
欲開啟的Dialog視窗類別 aDlg;
        aDlg.DoModal();//看到了吧!它叫「模式」開啟。
}