您好,登錄后才能下訂單哦!
一、創建過程 消息循環
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.所有者窗口與被所有者窗口的關系
被所有的窗口永遠顯示在所有者窗口之上,當所有者窗口最小化時,被所有窗口會自動隱藏
當所有窗口銷毀時,被所有的窗口就會被銷毀, 當所有者窗口移動時,被所有的窗口不一起移動,
被所有窗口可以在所有者窗口區域之外的位置顯示.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。