標籤:mfc 核心編程
一、建立控制項或視窗
建立控制項或者視窗的API是CreateWindow
按鈕控制項的建立,按鈕也是一個視窗,他註冊的視窗類別是BUTTON
HWND hWndBtn = CreateWindow(_T("BUTTON"),_T("我是按鈕"),WS_CHILD,0,0,100,30,hWndParent,(HMENU)1,hInst,NULL);
在視窗的hWndParent的RECT(0,0,100,300)地區建立了一個按鈕控制項,這個控制項的ID是1,代表這個按鈕被
點擊時會向wWndParent視窗發送一個WM_COMMAND訊息,wparam參數的低位為1.
3.複選框的建立 修改按鈕本身的風格可把按鈕變成複選框,比如BS_AUTOCHECKBOX就使按鈕
變成了CheckBox, 而且在滑鼠點擊時,它的選中狀態會自動改變,如果之前是選中,點擊後就
變成非選中狀態,建立代碼如下
HWND hWndCheckBox = CreateWindow(_T("BUTTON"),_T("我是複選框"),WS_CHILD|
BS_AUTOCHECKBOX,0,0,100,30,hWndParent,(HMENU)2,hInst,NULL);
4.SendMessage LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
向指定的視窗發送特定的訊息ID,帶上訊息所用的參數,
SendMessage 發送訊息後,收訊息的視窗必須處理完這個訊息,並且返回,SendMessage才會返回.
根據不同的訊息類型.傳回值的意義不一樣
5.獲得CheckBox的選中狀態,
通過SendMessage給CheckBox控制項視窗發送BM_GETCHECK訊息,可獲得選中狀態,
SendMessage(hWndChkBox,BM_GETCHECK,0,0)
傳回值:如果BST_UNCHECKED代表未選中,如果是BST_CHECKED代表選中
6.手動設定CheckBox狀態的方法
通過SendMessage給CheckBox控制項視窗發送BM_SETCHECK訊息.
SendMessage(hWndChkBox,BM_SETCHECK,BST_CHECKED,0)
通過以下代碼可以把CheckBox設定非選中狀態
SendMessage(hWndChkBox,BM_SETCHECK,BST_UNCHECKED,0)
7.單選控制項
單選控制項WS_GROUP 樣式,當有單選控制項建立時帶有這個樣式時,
之後建立的單選控制項都是這個組的, 直到有右另一個也帶有這個樣式,他又是一個新組
8.視窗置中的實現
視窗上下左右距離 桌面視窗的上下左距離一致 就是置中
RECT rect; GetWindowRect(hwnd,&rect);獲得視窗左上方到主視窗到右上方的xy, 已經視窗右下角到案頭的左上方的xy
獲得高寬方法 就是把右下減去左上,rect.right - rect.left. rect.bottom - rect.top;
把半個螢幕的寬度 減去 半個視窗的寬度, 獲得視窗最左邊要設定的位置.
直接把螢幕寬度 減去視窗的寬度 / 2 也行
然後MoveWindow(); 就行了。
9.MFC組成
a.必須喲預估CWinApp的衍生類別,並且這個類定義一個全域對象theApp
這個對象初始化的時候. 因為是靜態,所以他比WinMain函數,
還早執行, 也就是他先執行這個派生自CWinApp的類的建構函式.
b.衍生類別必須重寫InitInstance虛函數, 作為MFC的入口函數
10.MFC的訊息映射機制
a.一個對話方塊資源要建立和一個派生自CDialog類的關聯,
這個衍生類別構造的時候,會把這個對話方塊的資源傳給父類,
b.這個類在調用DoModal即可顯示這個視窗
c.VS的類嚮導提供快速產生,訊息對應的處理函數,
這樣就不需要手動去綁定訊息了.
d.如果要收到綁定訊息,首先定義處理函數,在這個衍生類別裡
BEGIN_MESSAGE_MAP(CMFC01Dlg, CBCGPDialog)
END_MESSAGE_MAP()
在這兩個宏定義 其實就是訊息處理,比如你要添加按鈕被點擊
ON_BN_CLICKED(按鈕ID,訊息處理函數)即可。
Windows核心編程(2)