該函數爲一個消息檢查線程消息隊列,並將該消息(如果存在)放於指定的結構。
函數原型:BOOL PeekMessage(LPMSG IpMsg,HWND hWnd,UINT wMSGfilterMin,UINT wMsgFilterMax,UINT wRemoveMsg);
參數:
lpMsg:接收消息信息的MSG結構指針。
hWnd:其消息被檢查的窗口的句柄。
wMsgFilterMin:指定被檢查的消息範圍裏的第一個消息。
wMsgFilterMax:指定被檢查的消息範圍裏的最後一個消息。
wRemoveMsg:確定消息如何被處理。此參數可取下列值之一:
PM_NOREMOVE:PeekMessage處理後,消息不從隊列裏除掉。
PM_REMOVE:PeekMessage處理後,消息從隊列裏除掉。
可將PM_NOYIELD隨意組合到PM_NOREMOVE或PM_REMOVE。此標誌使系統不釋放等待調用程序空閒的線程。 缺省地,處理所有類型的消息。若只處理某些消息,指定一個或多個下列值:
PM_QS_INPUT:Windows NT5.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不一樣的是,函數PeekMesssge在返回前不等待消息被放到隊列裏。
PeekMesssge只得到那些與參數hWnd標識的窗口相聯繫的消息或被lsChild確定爲其子窗口相聯繫的消息,並且該消息要在由參數wMsgFiterMin和wMsgFiherMax確定的範圍內。如果hWnd爲NULL,則PeekMessage接收屬於當前調用線程的窗口的消息(PeekMessage不接收屬於其他線程的窗口的消息)。如果hWnd爲C1,PeekMessage只返回hWnd值爲NULL的消息,該消息由函數PostThreadMessage寄送。如果wMsgFilterMin和wMsgFilterMax都爲零,GetMessage返回所有可得的消息(即,無範圍過濾)。
常數WM_KEYFIRST和WMKEYLAST可作爲過濾值取得所有鍵盤消息;常數WM_MOUSEFIRST和WM_MOUSELAST可用來接收所有的鼠標消息。
PeekMessage通常不從隊列裏清除WM_PAINT消息。該消息將保留在隊列裏直到處理完畢。但如果WM_PAINT消息有一個空更新區,PeekMessage將從隊列裏清除WM_PAINT消息。