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 // 要派發的消息
);