1. 程式人生 > >Windows核心編程(2)

Windows核心編程(2)

mfc 核心編程

一、創建控件或窗口

  1. 創建控件或者窗口的API是CreateWindow

  2. 按鈕控件的創建,按鈕也是一個窗口,他註冊的窗口類是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)