-
PeekMessage
鎖定
PeekMessage是一個Windows API函數。該函數為一個消息檢查線程消息隊列,並將該消息(如果存在)放於指定的結構。
- 外文名
- PeekMessage
- BOOL
- PeekMessage
- LPMSG
- IpMsg,
- HWND
- hWnd,
PeekMessage語法
BOOL PeekMessage( LPMSG IpMsg, HWND hWnd, UINT wMSGfilterMin, UINT wMsgFilterMax, UINT wRemoveMsg );
PeekMessage參數
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:處理所有發送消息。 |
PeekMessage返回值
如果消息可得到,返回非零值;如果沒有消息可得到,返回值是零。
PeekMessage其他信息
和函數PeekMessage不一樣的是,GetMessage:從系統獲取消息,將消息從系統中移除,屬於阻塞函數。當系統無消息時,GetMessage會等待下一條消息。而函數PeekMesssge是以查看的方式從系統中獲取消息,可以不將消息從系統中移除,是非阻塞函數;當系統無消息時,返回FALSE,繼續執行後續代碼。
PeekMessage只得到那些與參數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消息不從隊列裏清除。
PeekMessage需求
DLL最低版本 | user32.dll |
---|---|
頭文件 | 在Winuser.h中聲明,包含於Windows.h。 |
庫文件 | User32.lib |
操作系統最低版本 | Windows 95, Windows NT 3.1 |
Unicode | 以ANSI和Unicode版本實現。 |