語法
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_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版本實現。
|
---|