PeekMessage

xiaoxiao2021-02-27  181

调度传入的发送消息,检查发送消息的线程消息队列,并检索消息(如果有的话)。

BOOL WINAPI PeekMessage( _Out_ LPMSG lpMsg, _In_opt_ HWND hWnd, _In_ UINT wMsgFilterMin, _In_ UINT wMsgFilterMax, _In_ UINT wRemoveMsg );

参数 lpMsg [out] 类型:LPMSG 指向接收消息信息的MSG结构的指针。

hWnd [in,可选] 类型:HWND 要检索其消息的窗口的句柄。该窗口必须属于当前线程。 如果hWnd为NULL,PeekMessage将检索属于当前线程的任何窗口的消息,以及hwnd值为NULL的当前线程的消息队列中的任何消息(请参阅MSG结构)。因此,如果hWnd为NULL,则处理窗口消息和线程消息。 如果hWnd为-1,PeekMessage仅检索当前线程的消息队列中的消息,其中hwnd值为NULL,即PostMessage(hWnd参数为NULL)或PostThreadMessage发布的线程消息 。

wMsgFilterMin [in] 类型:UINT 要检查的消息范围内的第一条消息的值。使用WM_KEYFIRST(0x0100)指定第一个键盘消息或WM_MOUSEFIRST(0x0200)来指定第一个鼠标消息。 如果wMsgFilterMin和wMsgFilterMax都为零,PeekMessage返回所有可用的消息(即不执行范围过滤)。

wMsgFilterMax [in] 类型:UINT 要检查的消息范围内的最后一条消息的值。使用WM_KEYLAST指定最后一个键盘消息或WM_MOUSELAST来指定最后一个鼠标消息。 如果wMsgFilterMin和wMsgFilterMax都为零,PeekMessage返回所有可用的消息(即不执行范围过滤)。

wRemoveMsg [in] 类型:UINT 指定消息的处理方式。此参数可以是以下值中的一个或多个。

值 含义 PM_NOREMOVE 为0x0000

PeekMessage处理后消息不会从队列中删除。

PM_REMOVE 0×0001

PeekMessage处理后消息将从队列中删除。

PM_NOYIELD 0×0002

防止系统释放等待呼叫者空闲的任何线程(请参阅WaitForInputIdle)。

将此值与PM_NOREMOVE或PM_REMOVE组合。

 默认情况下,处理所有消息类型。要指定只处理某些消息,请指定以下一个或多个值。

值 含义 PM_QS_INPUT (QS_INPUT << 16)

处理鼠标和键盘消息。

PM_QS_PAINT (QS_PAINT << 16)

处理油漆消息。

PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER)<< 16)

处理所有发布的消息,包括计时器和热键。

PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)

处理所有发送的消息。

 返回值 类型:BOOL 如果消息可用,则返回值不为零。 如果没有可用的消息,返回值为零。

备注 的PeekMessage检索与由所述标识的窗口相关联的消息的hWnd由指定的参数或任何其子的IsChild功能,并且通过给定的消息的值的范围内wMsgFilterMin和wMsgFilterMax参数。 请注意,应用程序只能使用wMsgFilterMin和wMsgFilterMax参数中的低字; 高字保留给系统。

请注意,PeekMessage始终检索WM_QUIT消息,无论您为wMsgFilterMin和wMsgFilterMax指定了哪些值。

在此呼叫期间,系统提供待处理的非排队消息,即使用SendMessage,SendMessageCallback,SendMessageTimeout或SendNotifyMessage函数发送到调用线程拥有的窗口的消息。

然后检索与指定的过滤器匹配的第一个排队的消息。该系统还可以处理内部事件。如果未指定过滤器,则按以下顺序处理消息:

发送信息发布消息输入(硬件)消息和系统内部事件发消息(再次)WM_PAINT消息WM_TIMER消息

要在发布消息之前检索输入消息,请使用wMsgFilterMin和wMsgFilterMax参数。 所述的PeekMessage功能通常不会删除WM_PAINT从队列中的消息。WM_PAINT消息保留在队列中,直到它们被处理。但是,如果WM_PAINT消息具有NULL更新区域,PeekMessage将其从队列中删除。 如果顶级窗口停止响应消息超过几秒钟,系统会将该窗口视为不响应,并使用具有相同z阶,位置,大小和视觉属性的ghost窗口替换该窗口。这允许用户移动它,调整大小,甚至关闭应用程序。 但是,这些是唯一可用的操作,因为应用程序实际上没有响应。当一个应用程序被调试时,系统不会生成一个鬼窗口。

转载请注明原文地址: https://www.6miu.com/read-8991.html

最新回复(0)