GetMessage

【勇芳软件工作室】汉化HomePreviousNext

GetMessage函数从调用线程的消息队列中检索消息,并将其放在指定的结构中。此函数可以检索与指定窗口相关联的消息和通过PostThreadMessage 功能发布的线程消息。该函数检索位于指定的消息值范围内的消息。GetMessage不检索属于其他线程或应用程序的Windows的邮件。

BOOL GetMessage(

LPMSG 【LPMSG】,//具有消息结构的地址
HWND 【的hWnd】,//窗口的句柄
UINT 【wMsgFilterMin】,//第一个消息
UINT 【wMsgFilterMax】// last message
); 

参数

【LPMSG】

指向从线程的消息队列接收消息信息的MSG结构。

【的hWnd】

标识要检索其消息的窗口。一个值具有特殊意义:

含义
NULLGetMessage通过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