Windows核心編程(1)

一、創建過程 消息循環

1.WinMain首先調用Api函數RegisterClass註冊一個窗口類,這個類定義

  了窗口重要屬性,如窗口過程地址, 默認背景色, 圖標. 通過WNDCLASS結構字段

來定義,  程序生成一個窗口時,必須制定窗口類, 在類被使用之前,必須先對其進行註冊,

這就是爲什麼RegisterClass在程序的開始即被調用的原因,

2.一旦WNDCLASS被註冊,WinMain講調用最重要的CreateWindow函數生成應用程序

3.一個MFC程序你看不到WinMain函數,他也不調用RegisterClass或CreateWIndow

由於生成沒有WS_VISIBLE所以在CreateWIndow之後要調用ShowWindow

它是窗口可見,並確保WM_PAINT消息處理程序立刻執行。

4.接下來就是消息循環,爲了檢索並調度消息,WinMain執行一個簡單的反覆調用

GetMessage,TranslateMessage,和DispatchMessage這3個API講函數的while循環語句

GetMessage檢查消息隊列,如果某個消息是有效的,則講它從隊列刪除並複製到msg

否則GetMessage將停留到消息隊列上知道消息有效, msg是MSG的一個實例

其知道保包含相關的消息參數,

例如消息ID和消息被放置在隊列中的時間,  TranslateMessage函數將一個指示字符鍵的鍵盤

消息轉換成容易使用的WM_CHAR消息,DispatchMessage函數則講消息發送給窗口過程,

5.消息循環一直循環到GetMessage函數返回0值時結束, 這個只有WM_QUIT消息從消息隊列中

被檢索到時才發生,.這是WinMain結束,程序終止.

6.由DispatchMessage函數調度的消息將生產對窗口過程WinProc的調用, 其他沒有被處理

的消息傳遞給了DefWindowProc函數進行默認處理,

7.窗口類是Windows系統的數據結構, 窗口類包含窗口重要信息,如窗口風格,窗口消息處理WndProc

窗口的光標等




二、應用程序對象

  1. MFC應用核心是基於CWinApp類對象,CWinApp提供了消息循環並來檢索消息,

    並將消息調度給應用程序窗口

   2.覆蓋ExitInstance在應用程序終止後調用,是釋放資源的完美地方,覆蓋要確保調用基類






三、框架窗口對象

1.MFC的CWnd類機器派生類爲窗口或應用程序創建的窗口提供面向對象接口

窗口類是從CMainWindow是從CFrameWnd類派生的,後者又是從CWnd派生

CFrameWnd模仿框窗口的行爲,

2.客戶區和非客戶區

窗口的非客戶區包含標題欄.菜單欄,窗口邊框

客戶區指除非客戶區之外的區域,都是客戶區

3.窗口樣式 是影響窗口外觀和行爲的一組屬性集合

採用WS爲前綴的宏定義

WS_BORDER創建有邊框的窗口

WS_CAPTION創建有標題欄的窗口

WS_CHILD創建一個子窗口 等等...

4.窗口擴展樣  一般用WS_EX_爲前綴的宏定義

WS_EX_CLIENTEDGE指明窗口具有3D外觀

WS_EX_APPWINDOW當窗口可見時,將窗口放置在任務欄

WS_EX_CONTROLPARENT允許用戶TAB鍵遍歷子窗口 ...



四、窗口的Z-Order與桌面窗口

  1. 窗口Z-Order的概念

屏幕一般X軸Y軸表示平面位置,而以Z軸表示前後位置,X軸從左向右

Z軸從屏幕內指向屏幕外,Z-Order值表示窗口的前後順序,Z-Order值越大,在屏幕顯示越靠近用戶

2.桌面窗口

桌面窗口就是系統桌面對應的窗口,桌面窗口與其它的關係是,桌面窗口在最底層,其它窗口

在它之上,所有它的Z-Order值最小。



五、父窗口和所有者窗口

  1. 父窗口與所有者窗口的名次

窗口之間有兩種關係, 一種是owner-owner關係 和 parent-child關係

前者是所有/被所有關係, 後者是父/子關係, owner稱爲所有窗口,parent爲父窗口


2.父窗口與子窗口的關係

子窗口是嵌在父窗口上面的,就像是釘在父窗口上面的感覺,子窗口顯示區域不能超過

父窗口的顯示區域,超出的不顯示,當父窗口被隱藏時,它的所有子窗口也被隱藏,

當父窗口銷燬時,它擁有所有子窗口都被銷燬.


3.所有者窗口與被所有者窗口的關係

被所有的窗口永遠顯示在所有者窗口之上,當所有者窗口最小化時,被所有窗口會自動隱藏

當所有窗口銷燬時,被所有的窗口就會被銷燬, 當所有者窗口移動時,被所有的窗口不一起移動,

被所有窗口可以在所有者窗口區域之外的位置顯示.






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章