GetMessage

GetMessage

GetMessage是從調用執行緒的訊息佇列里取得一個訊息並將其放於指定的結構。此函式可取得與指定視窗聯繫的訊息和由PostThreadMessage寄送的執行緒訊息。此函式接收一定範圍的訊息值。GetMessage不接收屬於其他執行緒或應用程式的訊息。獲取訊息成功後,執行緒將從訊息佇列中刪除該訊息。函式會一直等待直到有訊息到來才有返回值。

基本介紹

  • 外文名:GetMessage
  • lpMsg:指向MSG結構的指針
  • hWnd:取得其訊息的視窗的句柄
  • 返回值:返回非零值
函式聲明,備註,實例,

函式聲明

GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
參數:
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_KEYLAST可作為過濾值取得與鍵盤輸入相關的所有訊息:常數WM_MOUSEFIRST和WM_MOUSELST可用來接收所有的滑鼠訊息。如果wMsgFilterMin和wMsgFilterMax都為零,GetMessage返回所有可得的訊息(即,無範圍過濾)。
GetMessage不從佇列里清除WM.PAINT訊息。該訊息將保留在佇列里直到處理完畢。
注意,此函式的返回值可非零、零或-1,應避免如下代碼出現:
while(GetMessage(IpMsg,hwnd,0,0))…
返回-1時處理錯誤而不是繼續循環
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:頭檔案:winuser.h;輸入庫:user32.Lib;Unicode:在Windows NT環境下以Unicode和ANSI方式實現。

實例

BOOLbRet;while((bRet=GetMessage(&msg,hWnd,0,0))!=0){if(bRet==-1){//handle the error and possibly exitreturn -1;}else{TranslateMessage(&msg);DispatchMessage(&msg);}}

相關詞條

熱門詞條

聯絡我們