Win32 API訊息函式 GetMessage

2022-03-24 20:22:57 字數 1255 閱讀 6786

函式功能:該函式從呼叫執行緒的訊息佇列裡取得乙個訊息並將其放於指定的結構。此函式可取得與指定視窗聯絡的訊息和由postthreadmesssge寄送的執行緒訊息。此函式接收一定範圍的訊息值。getmessage不接收屬於其他執行緒或應用程式的訊息。

函式原型:bool getmessage(lpmsg lpmsg,hwnd hwnd,uint wmsgfiltermin,uint wmsgfiltemax

引數:lpmsg:指向msg結構的指標,該結構從執行緒的訊息佇列裡接收訊息資訊。

hwnd:取得其訊息的視窗的控制代碼。這是乙個有特殊含義的值(null)。getmessage為任何屬於呼叫執行緒的視窗檢索訊息,執行緒訊息通過postthreadmessage寄送給呼叫執行緒。

wmsgfiltermin:指定被檢索的最小訊息值的整數。

wmsgfiltermax:指定被檢索的最大訊息值的整數。

返回值:如果函式取得wm_quit之外的其他訊息,返回非零值。如果函式取得wm_quit訊息,返回值是零。如果出現了錯誤,返回值是_1。例如,當 hwnd是無效的視窗控制代碼或lpmsg是無效的指標時。若想獲得更多的錯誤資訊,請呼叫getlasterror函式。

備註:應用程式通常用返回值來確定是否終止主訊息迴圈並退出程式。

getmesssge 只接收與引數hwnd標識的視窗或子視窗相聯絡的訊息,子視窗由函式ischild決定,訊息值的範圍由引數wmsgfiltermin和 wmsgfiltermax給出。如果hwnd為null,則getmessage接收屬於呼叫執行緒的視窗的訊息,執行緒訊息由函式 postthreadmessage寄送給呼叫執行緒。getmessage不接收屬於其他執行緒或其他執行緒的視窗的訊息,即使hwnd為null。由 postthreadmessage寄送的執行緒訊息,其訊息hwnd值為null。如果wmsgfiltermin和wmsgfiltermax都為零,getmessage返回所有可得的訊息(即,無範圍過濾)。

常數 wm_keyfirst和wm_keyast可作為過濾值取得與鍵盤輸入相關的所有訊息:常數wm_mousefirst和wm_mouselst可用來接收所有的滑鼠訊息。如果wmsgfiltermin和wmsgfiltermax都為零,getmessage返回所有可得的訊息(即,無範圍過濾)。

getmessage不從佇列裡清除wm.paint訊息。該訊息將保留在佇列裡直到處理完畢。

注意,此函式的返回值可非零、零或-1,應避免如下**出現:

while(getmessage(ipmsg,hwnd,0,0))…

-1返回值的可能性表示這樣的**會導致致命的應用程式錯誤。

學習win32API 訊息處理

訊息佇列與訊息迴圈 摘自win32api參考 var msg tmsg begin while processmessage msg do end 程式通過簡單地建立乙個迴圈來實現自己的訊息迴圈,通過呼叫下邊四個函式實現.以下參考delphi幫助,自己翻譯的,理解也許有錯誤,不過這正是我需要的,等回...

Win32 API講座 視窗函式

位。windows是用乙個長整形的資料的位設定方式來記錄類和視窗的樣式的。其中,視窗樣式由乙個32位樣式以及另乙個32 位擴充套件樣式來構成。類樣式操作由上述列表中的getclasslong以及getclasslong來進行,視窗樣式操作由getwindowlong 以及setwindowlong來...

win32 API程式設計之常用訊息詳解

一 傳送訊息的函式 例項 include include 自定義訊息 define wm aaa wm user 1hwnd hwnd hwnd hwnd2 自定義的視窗過程 lresult callback mywindowproc hwnd hwnd,uint msg,wparam wparam...