溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Windows核心編程(1)

發(fā)布時(shí)間:2020-07-31 04:28:01 來源:網(wǎng)絡(luò) 閱讀:705 作者:超級極客 欄目:編程語言

一、創(chuàng)建過程 消息循環(huán)

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>

  1. 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與桌面窗口

  1. 窗口Z-Order的概念

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

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

2.桌面窗口

桌面窗口就是系統(tǒng)桌面對應(yīng)的窗口,桌面窗口與其它的關(guān)系是,桌面窗口在最底層,其它窗口

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



五、父窗口和所有者窗口

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

窗口之間有兩種關(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)隱藏

當(dāng)所有窗口銷毀時(shí),被所有的窗口就會被銷毀, 當(dāng)所有者窗口移動(dòng)時(shí),被所有的窗口不一起移動(dòng),

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






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI