一、創(chuàng)建過程 消息循環(huán)
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供溫州網(wǎng)站建設(shè)、溫州做網(wǎng)站、溫州網(wǎng)站設(shè)計(jì)、溫州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、溫州企業(yè)網(wǎng)站模板建站服務(wù),十多年溫州做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1.WinMain首先調(diào)用Api函數(shù)RegisterClass注冊一個(gè)窗口類,這個(gè)類定義
了窗口重要屬性,如窗口過程地址, 默認(rèn)背景色, 圖標(biāo). 通過WNDCLASS結(jié)構(gòu)字段
來定義, 程序生成一個(gè)窗口時(shí),必須制定窗口類, 在類被使用之前,必須先對其進(jìn)行注冊,
這就是為什么RegisterClass在程序的開始即被調(diào)用的原因,
2.一旦WNDCLASS被注冊,WinMain講調(diào)用最重要的CreateWindow函數(shù)生成應(yīng)用程序
3.一個(gè)MFC程序你看不到WinMain函數(shù),他也不調(diào)用RegisterClass或CreateWIndow
由于生成沒有WS_VISIBLE所以在CreateWIndow之后要調(diào)用ShowWindow
它是窗口可見,并確保WM_PAINT消息處理程序立刻執(zhí)行。
4.接下來就是消息循環(huán),為了檢索并調(diào)度消息,WinMain執(zhí)行一個(gè)簡單的反復(fù)調(diào)用
GetMessage,TranslateMessage,和DispatchMessage這3個(gè)API講函數(shù)的while循環(huán)語句
GetMessage檢查消息隊(duì)列,如果某個(gè)消息是有效的,則講它從隊(duì)列刪除并復(fù)制到msg
否則GetMessage將停留到消息隊(duì)列上知道消息有效, msg是MSG的一個(gè)實(shí)例
其知道保包含相關(guān)的消息參數(shù),
例如消息ID和消息被放置在隊(duì)列中的時(shí)間, TranslateMessage函數(shù)將一個(gè)指示字符鍵的鍵盤
消息轉(zhuǎn)換成容易使用的WM_CHAR消息,DispatchMessage函數(shù)則講消息發(fā)送給窗口過程,
5.消息循環(huán)一直循環(huán)到GetMessage函數(shù)返回0值時(shí)結(jié)束, 這個(gè)只有WM_QUIT消息從消息隊(duì)列中
被檢索到時(shí)才發(fā)生,.這是WinMain結(jié)束,程序終止.
6.由DispatchMessage函數(shù)調(diào)度的消息將生產(chǎn)對窗口過程WinProc的調(diào)用, 其他沒有被處理
的消息傳遞給了DefWindowProc函數(shù)進(jìn)行默認(rèn)處理,
7.窗口類是Windows系統(tǒng)的數(shù)據(jù)結(jié)構(gòu), 窗口類包含窗口重要信息,如窗口風(fēng)格,窗口消息處理WndProc
窗口的光標(biāo)等
二、應(yīng)用程序?qū)ο?/p>
MFC應(yīng)用核心是基于CWinApp類對象,CWinApp提供了消息循環(huán)并來檢索消息,
并將消息調(diào)度給應(yīng)用程序窗口
2.覆蓋ExitInstance在應(yīng)用程序終止后調(diào)用,是釋放資源的完美地方,覆蓋要確保調(diào)用基類
三、框架窗口對象
1.MFC的CWnd類機(jī)器派生類為窗口或應(yīng)用程序創(chuàng)建的窗口提供面向?qū)ο蠼涌?/p>
窗口類是從CMainWindow是從CFrameWnd類派生的,后者又是從CWnd派生
CFrameWnd模仿框窗口的行為,
2.客戶區(qū)和非客戶區(qū)
窗口的非客戶區(qū)包含標(biāo)題欄.菜單欄,窗口邊框
客戶區(qū)指除非客戶區(qū)之外的區(qū)域,都是客戶區(qū)
3.窗口樣式 是影響窗口外觀和行為的一組屬性集合
采用WS為前綴的宏定義
WS_BORDER創(chuàng)建有邊框的窗口
WS_CAPTION創(chuàng)建有標(biāo)題欄的窗口
WS_CHILD創(chuàng)建一個(gè)子窗口 等等...
4.窗口擴(kuò)展樣 一般用WS_EX_為前綴的宏定義
WS_EX_CLIENTEDGE指明窗口具有3D外觀
WS_EX_APPWINDOW當(dāng)窗口可見時(shí),將窗口放置在任務(wù)欄
WS_EX_CONTROLPARENT允許用戶TAB鍵遍歷子窗口 ...
四、窗口的Z-Order與桌面窗口
窗口Z-Order的概念
屏幕一般X軸Y軸表示平面位置,而以Z軸表示前后位置,X軸從左向右
Z軸從屏幕內(nèi)指向屏幕外,Z-Order值表示窗口的前后順序,Z-Order值越大,在屏幕顯示越靠近用戶
2.桌面窗口
桌面窗口就是系統(tǒng)桌面對應(yīng)的窗口,桌面窗口與其它的關(guān)系是,桌面窗口在最底層,其它窗口
在它之上,所有它的Z-Order值最小。
五、父窗口和所有者窗口
父窗口與所有者窗口的名次
窗口之間有兩種關(guān)系, 一種是owner-owner關(guān)系 和 parent-child關(guān)系
前者是所有/被所有關(guān)系, 后者是父/子關(guān)系, owner稱為所有窗口,parent為父窗口
2.父窗口與子窗口的關(guān)系
子窗口是嵌在父窗口上面的,就像是釘在父窗口上面的感覺,子窗口顯示區(qū)域不能超過
父窗口的顯示區(qū)域,超出的不顯示,當(dāng)父窗口被隱藏時(shí),它的所有子窗口也被隱藏,
當(dāng)父窗口銷毀時(shí),它擁有所有子窗口都被銷毀.
3.所有者窗口與被所有者窗口的關(guān)系
被所有的窗口永遠(yuǎn)顯示在所有者窗口之上,當(dāng)所有者窗口最小化時(shí),被所有窗口會自動隱藏
當(dāng)所有窗口銷毀時(shí),被所有的窗口就會被銷毀, 當(dāng)所有者窗口移動時(shí),被所有的窗口不一起移動,
被所有窗口可以在所有者窗口區(qū)域之外的位置顯示.