Win32編程五:Windows消息機制

Windows的消息機制

  程序的執行機制

    過程驅動-程序的執行過程是按照預定好的順序執行

    事件驅動-程序的執行是無序,用戶根據需要隨機觸發相應的事件

  Win32窗口程序就是採用時間驅動方式執行,也就是消息機制

  什麼是消息

    當系統通知窗口工作時,就採用消息的方式派發(DispatchMessage來派發)給窗口的自定義的處理函數函數WNDCLASSEX.lpfnWndProc

    消息組成:

      窗口句柄

      消息ID

      消息的兩個參數 如鼠標單擊,兩個參數如下:

        消息產生的時間

        消息產生的鼠標位置

  窗口處理函數和消息

    每個窗口都必須具有窗口處理函數

    回調函數:自己定義一個函數,自己沒調用給操作系統調用

LRESULT CALLBACK WindowProc(      
    HWND hwnd,  //窗口句柄
    UINT uMsg,  //消息ID
    WPARAM wParam, //消息參數
    LPARAM lParam //消息參數
);

    當系統通知窗口時,會調用窗口處理函數同時將消息ID和消息參數傳遞給窗口處理函數

    在窗口處理函數中,不處理的消息,使用缺省窗口處理函數 ,例如 DefWindowsProc

  消息相關函數

    1 GetMessage-獲取消息,只能抓取本進程的消息      

BOOL GetMessage(      
 
    LPMSG lpMsg, //存放獲取到的消息BUFF
    HWND hWnd, //窗口句柄,抓取哪個窗口的消息,如果爲空抓取本進程所有消息
    UINT wMsgFilterMin, //獲取消息的最小ID
    UINT wMsgFilterMax //獲取消息的最大ID
);
  lpMsg - 當獲取到消息後,將消息的參數存放在MSG結構中
  hWnd - 獲取到hWnd所指定窗口的消息
  wMsgFilterMin和wMsgFilterMax - 只能獲取到由它們指定消息範圍內的消息,如果都爲0,表示沒有範圍
通過現象發現 PostQuitMessage可以使GetMessage返回0
以下是MSDN的解釋:
GetMessage返回值:

If the function retrieves a message other than WM_QUIT, the return value is nonzero.

If the function retrieves the WM_QUIT message, the return value is zero.

PostQuitMessage Function


The PostQuitMessage function indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message.

Syntax

void PostQuitMessage(      

    int nExitCode
);

Parameters

nExitCode

[in] Specifies an application exit code. This value is used as the wParam parameter of the WM_QUIT message.

2 TranslateMessage - 翻譯消息。將按鍵消息,翻譯成字符消息。

  BOOL TranslateMessage(

    CONST MSG *lpMsg //要翻譯的消息地址

  );

  檢查消息是否按鍵的消息,如果不是按鍵消息,不做任何處理,繼續執行。

3 DispatchMessage - 派發消息。將消息派發到該消息所屬窗口的窗口處理函數上

  LRESULT DispathMessage(

    CONST MSG *lpmsg // 要派發的消息

  );

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章