Windows核心編程(2)

來源:互聯網
上載者:User

標籤: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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.