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

打開APP
userphoto
未登錄

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

開通VIP
Windows消息機(jī)制的理解

一.    消息的概念

  當(dāng)用戶單擊鼠標(biāo)、改變窗口大小或者按下鍵盤上的一個(gè)鍵等用戶動作時(shí),會觸發(fā)點(diǎn)擊,按鍵等事件,而windows系統(tǒng)把這些事件轉(zhuǎn)化為特定的消息,并放置在應(yīng)用程序的消息列隊(duì)中(windows為當(dāng)前運(yùn)行的每一個(gè)windows程序維護(hù)了一個(gè)消息列隊(duì))等待應(yīng)用程序的處理,而應(yīng)用程序不斷從消息列隊(duì)中取出消息,并進(jìn)行響應(yīng)。所以說windows是基于消息的事件驅(qū)動模式。

二.    消息如何被處理?(窗口過程)

  按照一般寫程序的思維而言,我們希望傳給函數(shù)正確的參數(shù)來調(diào)用這個(gè)函數(shù)。而windows消息可以理解為指定了的函數(shù)的參數(shù),例如:用戶需要關(guān)閉某個(gè)窗口,點(diǎn)擊了右上角的X后,windows便把這個(gè)行為轉(zhuǎn)換為消息加入消息列隊(duì),而這個(gè)消息可能包含了“需要關(guān)閉的是哪一個(gè)窗口(窗口句柄)”,“關(guān)閉窗口的信息”這樣的參數(shù),應(yīng)用程序從消息列隊(duì)中讀取到了這個(gè)消息,并把它交給“關(guān)閉窗口”這個(gè)函數(shù)來進(jìn)行處理,而這個(gè)函數(shù)就叫做“窗口過程”,這樣聽起來不好理解,可以加長的理解為“處理窗口消息的函數(shù)過程”。

     而如果沒有對應(yīng)的函數(shù)來處理這個(gè)消息呢?例如,拖動窗口。為此,windows會用默認(rèn)的消息處理函數(shù)(DefWindowProc)來進(jìn)行處理.

三.    消息的組成

 消息結(jié)構(gòu)體長這樣

   typedef struct tagMSG {        HWND   hwnd;   //消息句柄,理解為窗口的唯一標(biāo)志    UINT   message;    //消息類型,分為windows消息和用戶自己定義的消息    WPARAM wParam;    //消息附加參數(shù)    LPARAM lParam;    //消息附加參數(shù)    DWORD  time;    //消息產(chǎn)生時(shí)間愛你    POINT  pt;    //消息被發(fā)送時(shí)的光標(biāo)位置  } MSG;

四.    消息發(fā)送的方式

1.    投遞消息PostMessage

 異步執(zhí)行,發(fā)送到消息列隊(duì)后立即返回?zé)o序等待。

應(yīng)用程序一般是投遞一個(gè)消息來通知指定窗口完成某個(gè)任務(wù)

BOOL PostMessage(    HWND        hWnd,      //目標(biāo)窗口句柄    UINT          Msg,       //消息類型    WPARAM     wParam,     //第一個(gè)消息參數(shù)    LPARAM      lParam      //第二個(gè)消息參數(shù));

2.    發(fā)送消息 SendMessage

 同步執(zhí)行,需要等到消息的返回碼之后在繼續(xù)。

基本上所有的輸入類消息,都是以投遞的方式抵達(dá)應(yīng)用的,而其他的消息,則大部分是采取了發(fā)送方式。

LRESULT SendMessage(  HWND hWnd,          //接收消息的目標(biāo)窗口  UINT Msg,            //消息類型  WPARAM wParam,    //第一個(gè)消息參數(shù)  LPARAM lParam      //第二個(gè)消息參數(shù));

五.    消息循環(huán)實(shí)例

while(GetMessage (&msg, NULL, 0, 0)) //消息循環(huán),不斷從消息列隊(duì)取出消息

{

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

DispatchMessage (&msg) ; //把消息發(fā)送給窗口過程

}

//消息過程是一個(gè)CALLBACK回調(diào)函數(shù),每處理一個(gè)消息會返回一個(gè)值給windows

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)  

{  

   HDC         hdc;  

   PAINTSTRUCT ps;  

   RECT        rect;  

   switch (message)  

   {  

   case WM_CREATE:  

       PlaySound(TEXT('hello.wav'), NULL, SND_FILENAME | SND_ASYNC);  //窗口創(chuàng)建的時(shí)候播放音樂

       return 0;  

   case WM_DESTROY:  

       PostQuitMessage(0);  //把退出窗口的消息插入消息列隊(duì)

       return 0;  

   }  

   return DefWindowProc(hwnd, message, wParam, lParam);  //默認(rèn)的消息處理函數(shù)

}

   

             

本文轉(zhuǎn)自:簡書

微信號:IdeaofSE


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
LRESULT CALLBACK WndProc
Windows消息機(jī)制 vc
PostMessage和SendMessage,SendMessageTimeout區(qū)別
windows.h和windowsx.h區(qū)別
day01
PostMessage(異步)和SendMessage(同步)的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服