GetMessage函数从调用线程的消息队列中检索消息,并将其放在指定的结构中。此函数可以检索与指定窗口相关联的消息和通过PostThreadMessage 功能发布的线程消息。该函数检索位于指定的消息值范围内的消息。GetMessage不检索属于其他线程或应用程序的Windows的邮件。
BOOL GetMessage(
LPMSG 【LPMSG】, | //具有消息结构的地址 |
HWND 【的hWnd】, | //窗口的句柄 |
UINT 【wMsgFilterMin】, | //第一个消息 |
UINT 【wMsgFilterMax】 | // last message |
); |
参数
【LPMSG】
指向从线程的消息队列接收消息信息的MSG结构。
【的hWnd】
标识要检索其消息的窗口。一个值具有特殊意义:
值 | 含义 |
NULL | GetMessage通过PostThreadMessage检索属于调用线程的任何窗口和发布到调用线程的线程消息的消息。 |
【wMsgFilterMin】
指定要检索的最低消息值的整数值。
【wMsgFilterMax】
指定要检索的最高消息值的整数值。
返回值
如果函数检索到除WM_QUIT之外的消息,则返回值不为零。
如果函数检索WM_QUIT消息,返回值为零。
如果有错误,返回值为-1。例如,如果【的hWnd】是无效的窗口句柄,则该函数将失败。
备注
应用程序通常使用返回值来确定是否结束主消息循环并退出程序。
GetMessage函数仅检索与【的hWnd】参数或其任何子项(由IsChild函数指定)标识的窗口相关联的消息,并且在【wMsgFilterMin】和【wMsgFilterMax】中给出的消息值范围内,参数。如果【的hWnd】为NULL,则GetMessage将通过PostThreadMessage检索属于调用线程的任何窗口和发送到调用线程的线程消息的消息。GetMessage不检索属于其他线程的Windows的消息,也不检索调用线程以外的线程的消息。由PostThreadmessage功能发布的线程消息的消息【的hWnd】的值为NULL。如果【wMsgFilterMin】和【wMsgFilterMax】均为零,则GetMessage返回所有可用消息(即不执行范围过滤)。
可以使用WM_KEYFIRST和WM_KEYLAST常量作为过滤器值来检索与键盘输入相关的所有消息; WM_MOUSEFIRST和WM_MOUSELAST常量可用于检索所有鼠标消息。如果【wMsgFilterMin】和【wMsgFilterMax】参数均为零,则GetMessage函数将返回所有可用消息(即,不执行任何过滤)。
GetMessage不会从队列中删除WM_PAINT消息。消息保留在队列中,直到处理完毕。
请注意,函数返回值可以为TRUE,FALSE或-1。因此,你应该避免这样的代码:
while(GetMessage(lpMsg,hWnd,0,0))...
-1返回值的可能性意味着这样的代码可能导致致命的应用程序错误。
也可以看看
IsChild, MSG, PeekMessage, PostMessage, PostThreadMessage, WaitMessage