国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SDK編程講座 之 第三講:Windows消息機(jī)制(2)(轉(zhuǎn)載)

(二)創(chuàng)建窗口

注冊(cè)窗口類后,就可以創(chuàng)建窗口了,本程序中創(chuàng)建窗口的有關(guān)語(yǔ)句如下:

 hwnd = CreateWindow (szAppName,                     // window class name

                          TEXT ("歡迎你的到來(lái)!"),    // window caption

                          WS_OVERLAPPEDWINDOW,        // window style

                          CW_USEDEFAULT,              // initial x position

                          CW_USEDEFAULT,              // initial y position

                          CW_USEDEFAULT,              // initial x size

                          CW_USEDEFAULT,              // initial y size

                          NULL,                       // parent window handle

                          NULL,                       // window menu handle

                          hInstance,                  // program instance handle

                          NULL) ;                     // creation parameters

參數(shù)1:登記的窗口類名,這個(gè)類名剛才咱們?cè)谧?cè)窗口時(shí)已經(jīng)定義過(guò)了。

參數(shù)2:用來(lái)表明窗口的標(biāo)題。

參數(shù)3: 用來(lái)表明窗口的風(fēng)格,如有無(wú)最大化,最小化按紐啊什么的。

參數(shù)4,5: 用來(lái)表明程序運(yùn)行后窗口在屏幕中的坐標(biāo)值。

參數(shù)6,7: 用來(lái)表明窗口初始化時(shí)(即程序初運(yùn)行時(shí))窗口的大小,即長(zhǎng)度與寬度。

參數(shù)8: 在創(chuàng)建窗口時(shí)可以指定其父窗口,這里沒(méi)有窗口則參數(shù)值為0。 

參數(shù)9: 用以指明窗口的菜單,菜單以后會(huì)講,這里暫時(shí)為0。

最后一個(gè)參數(shù)是附加數(shù)據(jù),一般都是0。

CreateWindow()的返回值是已經(jīng)創(chuàng)建的窗口的句柄,應(yīng)用程序使用這個(gè)句柄來(lái)引用該窗口。如果返回值為0,就應(yīng)該終止該程序,因?yàn)榭赡苣硞€(gè)地方出錯(cuò)了。如果一個(gè)程序創(chuàng)建了多個(gè)窗口,則每個(gè)窗口都有各自不同的句柄.

(三)顯示和更新窗口

     API函數(shù)CreateWindow創(chuàng)建完窗口后,要想把它顯示出現(xiàn),還必須調(diào)用另一個(gè)API函數(shù)ShowWindows.形式為: 

ShowWindow (hwnd, iCmdShow); 

其第一個(gè)參數(shù)是窗口句柄,告訴ShowWindow()顯示哪一個(gè)窗口,而第二個(gè)參數(shù)則告訴它如何顯示這個(gè)窗口:最小化(SW_MINIMIZE),普通(SW_SHOWNORMAL),還是最大化(SW_SHOWMAXIMIZED)。WinMain在創(chuàng)建完窗口后就調(diào)用ShowWindow函數(shù),并把iCmdShow參數(shù)傳送給這個(gè)窗口。你可把iCmdShow改變?yōu)檫@些參數(shù)試試。

WinMain()調(diào)用完ShowWindow后,還需要調(diào)用函數(shù)UpdateWindow,最終把窗口顯示了出來(lái)。調(diào)用函數(shù)UpdateWindow將產(chǎn)生一個(gè)WM_PAINT消息,這個(gè)消息將使窗口重畫,即使窗口得到更新.

(四)創(chuàng)建消息循環(huán)

主窗口顯示出來(lái)了,WinMain就開始處理消息了,怎么做的呢?

Windows為每個(gè)正在運(yùn)行的應(yīng)用程序都保持一個(gè)消息隊(duì)列。當(dāng)你按下鼠標(biāo)或者鍵盤時(shí),Windows并不是把這個(gè)輸入事件直接送給應(yīng)用程序,而是將輸入的事件先翻譯成一個(gè)消息,然后把這個(gè)消息放入到這個(gè)應(yīng)用程序的消息隊(duì)列中去。應(yīng)用程序又是怎么來(lái)接收這個(gè)消息呢?這就講講消息循環(huán)了。

應(yīng)用程序的WinMain函數(shù)通過(guò)執(zhí)行一段代碼從她的隊(duì)列中來(lái)檢索Windows送往她的消息。然后WinMain就把這些消息分配給相應(yīng)的窗口函數(shù)以便處理它們,這段代碼是一段循環(huán)代碼,故稱為"消息循環(huán)"。這段循環(huán)代碼是什么呢?好,往下看:

在咱們的第二只小板凳中,這段代碼就是:

......

MSG msg; //定義消息名

while (GetMessage (&msg, NULL, 0, 0))

     {

          TranslateMessage (&msg) ; //翻譯消息

          DispatchMessage (&msg) ; //撤去消息

     }

     return msg.wParam ;

MSG結(jié)構(gòu)在頭文件中定義如下:

typedef struct tagMSG 

{

HWND hwnd; 

UINT message; 

WPARAM wParam; 

LPARAM lParam; 

DWORD time; 

POINT pt; 

} MSG, *PMSG; 

MSG數(shù)據(jù)成員意義如下:

參數(shù)1:hwnd是消息要發(fā)送到的那個(gè)窗口的句柄,這個(gè)窗口就是咱們用CreateWindows函數(shù)創(chuàng)建的那一個(gè)。如果是在一個(gè)有多個(gè)窗口的應(yīng)用程序中,用這個(gè)參數(shù)就可決定讓哪個(gè)窗口接收消息。

參數(shù)2:message是一個(gè)數(shù)字,它唯一標(biāo)識(shí)了一種消息類型。每種消息類型都在Windows文件中定義了,這些常量都以WM_開始后面帶一些描述了消息特性的名稱。比如說(shuō)當(dāng)應(yīng)用程序退出時(shí),Windows就向應(yīng)用程序發(fā)送一條WM_QUIT消息。

參數(shù)3:一個(gè)32位的消息參數(shù),這個(gè)值的確切意義取決于消息本身。

參數(shù)4:同上。

參數(shù)5:消息放入消息隊(duì)列中的時(shí)間,在這個(gè)域中寫入的并不是日期,而是從Windows啟動(dòng)后所測(cè)量的時(shí)間值。Windows用這個(gè)域來(lái)使用消息保持正確的順序。

參數(shù)6:消息放入消息隊(duì)列時(shí)的鼠標(biāo)坐標(biāo).

消息循環(huán)以GetMessage調(diào)用開始,它從消息隊(duì)列中取出一個(gè)消息:

GetMessage(&msg,NULL,0,0),第一個(gè)參數(shù)是要接收消息的MSG結(jié)構(gòu)的地址,第二個(gè)參數(shù)表示窗口句柄,NULL則表示要獲取該應(yīng)用程序創(chuàng)建的所有窗口的消息;第三,四參數(shù)指定消息范圍。后面三個(gè)參數(shù)被設(shè)置為默認(rèn)值,這就是說(shuō)你打算接收發(fā)送到屬于這個(gè)應(yīng)用程序的任何一個(gè)窗口的所有消息。在接收到除WM_QUIT之外的任何一個(gè)消息后,GetMessage()都返回TRUE。如果GetMessage收到一個(gè)WM_QUIT消息,則返回FALSE,如收到其他消息,則返回TRUE。因此,在接收到WM_QUIT之前,帶有GetMessage()的消息循環(huán)可以一直循環(huán)下去。只有當(dāng)收到的消息是WM_QUIT時(shí),GetMessage才返回FALSE,結(jié)束消息循環(huán),從而終止應(yīng)用程序。 均為NULL時(shí)就表示獲取所有消息。

消息用GetMessage讀入后(注意這個(gè)消息可不是WM_QUIT消息),它首先要經(jīng)過(guò)函數(shù)TranslateMessage()進(jìn)行翻譯,這個(gè)函數(shù)會(huì)轉(zhuǎn)換成一些鍵盤消息,它檢索匹配的WM_KEYDOWN和WM_KEYUP消息,并為窗口產(chǎn)生相應(yīng)的ASCII字符消息(WM_CHAR),它包含指定鍵的ANSI字符.但對(duì)大多數(shù)消息來(lái)說(shuō)它并不起什么作用,所以現(xiàn)在沒(méi)有必要考慮它。

下一個(gè)函數(shù)調(diào)用DispatchMessage()要求Windows將消息傳送給在MSG結(jié)構(gòu)中為窗口所指定的窗口過(guò)程。我們?cè)谥v到登記窗口類時(shí)曾提到過(guò),登記窗口類時(shí),我們?cè)付╓indows把函數(shù)WindosProc作為咱們這個(gè)窗口的窗口過(guò)程(就是指處理這個(gè)消息的東東)。就是說(shuō),Windows會(huì)調(diào)用函數(shù)WindowsProc()來(lái)處理這個(gè)消息。在WindowProc()處理完消息后,代碼又循環(huán)到開始去接收另一個(gè)消息,這樣就完成了一個(gè)消息循環(huán)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Win32編程基礎(chǔ)知識(shí)_天空總是藍(lán)色的
Windows消息機(jī)制 vc
windows消息隊(duì)列 - windows - 我的愛好
windows窗口的創(chuàng)建
Windows消息編程原理
Windows 程序內(nèi)部運(yùn)行機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服