PeekMessage
PeekMessage
BOOL PeekMessage(
LPMSG IpMsg,
HWND hWnd,
UINT wMSGfilterMin,
UINT wMsgFilterMax,
UINT wRemoveMsg
);
lpMsg
接收消息信息的MSG結構指針。
其消息被檢查的窗口句柄。
wMsgFilterMin
指定被檢查的消息範圍里的第一個消息。
wMsgFilterMax
指定被檢查的消息範圍里的最後一個消息。
wRemoveMsg
確定消息如何被處理。此參數可取下列值之一:
值 | 意義 |
PM_NOREMOVE | PeekMessage處理后,消息不從隊列里除掉。 |
PM_REMOVE | PeekMessage處理后,消息從隊列里除掉。 |
PM_NOYIELD | 此標誌使系統不釋放等待調用程序空閑的線程。可將PM_NOYIELD隨意組合到PM_NOREMOVE或PM_REMOVE。 |
預設地,處理所有類型的消息。若只處理某些消息,指定一個或多個下列值:
值 | 意義 |
PM_QS_INPUT | Windows NT 5.0和Windows 98:處理滑鼠和鍵盤消息。 |
PM_QS_PAINT | Windows NT 5.0和Windows 98:處理畫圖消息。 |
PM_QS_POSTMESSAGE | Windows NT 5.0和Windows 98:處理所有被寄送的消息,包括計時器和熱鍵。 |
PM_QS_SENDMESSAGE | Windows NT 5.0和Windows 98:處理所有發送消息。 |
如果消息可得到,返回非零值;如果沒有消息可得到,返回值是零。
和函數GetMessage不一樣的是,GetMessage:從系統獲取消息,將消息從系統中移除,屬於阻塞函數。當系統無消息時,GetMessage會等待下一條消息。而函數PeekMesssge是以查看的方式從系統中獲取消息,可以不將消息從系統中移除,是非阻塞函數;當系統無消息時,返回FALSE,繼續執行後續代碼。
PeekMesssge只得到那些與參數hWnd標識的窗口相聯繫的消息或被lsChild確定為其子窗口相聯繫的消息,並且該消息要在由參數wMsgFiterMin和wMsgFiherMax確定的範圍內。如果hWnd為NULL,則PeekMessage接收屬於當前調用線程的窗口的消息(PeekMessage不接收屬於其他線程的窗口的消息)。如果hWnd為-1,PeekMessage只返回hWnd值為NULL的消息,該消息由函數PostThreadMessage寄送。如果wMsgFilterMin和wMsgFilterMax都為零,PeekMessage返回所有可得的消息(即,無範圍過濾)。
常數WM_KEYFIRST和WM_KEYLAST可作為過濾值取得所有鍵盤消息;常數WM_MOUSEFIRST和WM_MOUSELAST可用來接收所有的滑鼠消息。
PeekMessage通常不從隊列里清除WM_PAINT消息。該消息將保留在隊列里直到處理完畢。但如果WM_PAINT消息不指向無效區,PeekMessage將能夠從隊列里清除WM_PAINT消息。
Windows CE:具備無效區的WM_PAINT消息不從隊列里清除。
DLL最低版本 | user32.dll |
頭文件 | 在Winuser.h中聲明,包含於Windows.h。 |
庫文件 | User32.lib |
操作系統最低版本 | Windows 95, Windows NT 3.1 |
Unicode | 以ANSI和Unicode版本實現。 |