標籤:Windows MFC
一、建立過程 訊息迴圈
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
視窗的游標等
二、應用程式物件
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與桌面視窗
視窗Z-Order的概念
螢幕一般X軸Y軸表示平面位置,而以Z軸表示前後位置,X軸從左向右
Z軸從螢幕內指向螢幕外,Z-Order值表示視窗的前後順序,Z-Order值越大,在螢幕顯示越靠近使用者
2.桌面視窗
桌面視窗就是系統案頭對應的視窗,桌面視窗與其它的關係是,桌面視窗在最底層,其它視窗
在它之上,所有它的Z-Order值最小。
五、父視窗和所有者視窗
父視窗與所有者視窗的名次
視窗之間有兩種關係, 一種是owner-owner關係 和 parent-child關係
前者是所有/被所有關係, 後者是父/子關係, owner稱為所有視窗,parent為父視窗
2.父視窗與子視窗的關係
子視窗是嵌在父視窗上面的,就像是釘在父視窗上面的感覺,子視窗顯示地區不能超過
父視窗的顯示地區,超出的不顯示,當父視窗被隱藏時,它的所有子視窗也被隱藏,
當父視窗銷毀時,它擁有所有子視窗都被銷毀.
3.所有者視窗與被所有者視窗的關係
被所有的視窗永遠顯示在所有者視窗之上,當所有者視窗最小化時,被所有視窗會自動隱藏
當所有視窗銷毀時,被所有的視窗就會被銷毀, 當所有者視窗移動時,被所有的視窗不一起移動,
被所有視窗可以在所有者視窗地區之外的位置顯示.
Windows核心編程(1)