GetMessage()
原型:
BOOL GetMessage(LPMSG lpMsg, HWND hWNd, UINT wMsgFilterMin, UINT wMsgFilterMax);
Retrieves a message from the calling threads queque. The function dispatches incoming sent message until a posted message is available for retrieval.
從調用線程的消息隊列中取得一個消息並將該消息放在指定的結構(MSG).此函數可取得與指定窗口聯系的消息和由PostThreadMessage寄送的消息。次函數接受一定范圍的消息值。由GetMessage不接受屬於其他線程或者應用程序的消息。獲取消息成功后,線程將從消息隊里中刪除該消息。
函數會一直等待直到有消息到來才有返回值。
備注:
應用程序通常用返回值來確定是否終止主消息循環並退出程序。
GetMessage值接受與參數hWnd標示的窗口或子窗口相關聯的消息。如果hWnd為NULL,則GetMessage接受屬於調用線程的窗口消息,線程消息由函數PostThreadMessage()寄送給調用線程。GetMessage不接受其他線程或者其他線程的窗口消息。如果UINT wMsgFilterMin, UINT wMsgFilterMax都為0,則Getmessage返回所有可得到的消息(即,如范圍考慮)。
GetMessage不從隊列里清除WM.PAINT消息。該消息將保留在隊列里直到處理完畢。
...............................................................................
PeekMessage()
原型
BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMSGfilterMin, UINT wMSGfilterMax, UINT wRemoveMsg)
wRemoveMsg
確定消息如何被處理。此參數可取下列值之一:
PM_NOREMOVE PeekMessage處理后,消息不從隊列里除掉。
PM_REMOVE PeekMessage處理后,消息從隊列里除掉。
PM_NOYIELD 此標志使系統不釋放等待調用程序空閑的線程。可將PM_NOYIELD隨意組合到PM_NOREMOVE或PM_REMOVE。
備注:
函數GetMessage不一樣的是,GetMessage:從系統獲取消息,將消息從系統中移除,屬於阻塞函數。當系統無消息時,GetMessage會等待下一條消息。
函數PeekMesssge是以查看的方式從系統中獲取消息,可以不將消息從系統中移除,是非阻塞函數;當系統無消息時,返回FALSE,繼續執行后續代碼。
PeekMessage通常不從隊列里清除WM_PAINT消息。該消息將保留在隊列里直到處理完畢。但如果WM_PAINT消息有一個空更新區,PeekMessage將從隊列里清除WM_PAINT消息。