複製鏈接
請複製以下鏈接發送給好友

GetMessage

鎖定
GetMessage是從調用線程的消息隊列裏取得一個消息並將其放於指定的結構。此函數可取得與指定窗口聯繫的消息和由PostThreadMessage寄送的線程消息。此函數接收一定範圍的消息值。GetMessage不接收屬於其他線程或應用程序的消息。獲取消息成功後,線程將從消息隊列中刪除該消息。函數會一直等待直到有消息到來才有返回值。
外文名
GetMessage
lpMsg
指向MSG結構的指針
hWnd
取得其消息的窗口的句柄
返回值
返回非零值

GetMessage函數聲明

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函數。

GetMessage注意事項

應用程序通常用返回值來確定是否終止主消息循環並退出程序。
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方式實現。

GetMessage實例

BOOLbRet;

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