7

我的代码中有一个循环函数,它调用PeekMessage以检索事件。

目前它看起来像这样:

while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
    // Process events
}

现在我想在不同的位置管理输入,这意味着我想在我的主循环的不同时间在不同的地方检索诸如WM_KEYDOWN, (鼠标和键盘事件)之类的消息。WM_MOUSEMOVE

PeekMessage的第三个和第四个参数允许定义要返回的消息范围,所以我可以使用它,使用提供的宏WM_KEYFIRSTWM_KEYLAST和. 但这很不方便,因为我有两个范围来检查输入,因此剩下的所有内容都需要三个范围。WM_MOUSEFIRSTWM_MOUSELAST

最后一个参数是一个标志,我可以传递PM_REMOVE | PM_QS_INPUT输入。但是,我应该在另一个循环中传递什么,我想在哪里获取所有其他消息?没有PM_QS_EVERYTHING_EXCEPT_INPUT宏...

最优雅的方法是什么?

4

1 回答 1

1

您可以尝试使用“过滤器”。Win32 称之为“钩子”,看看 msdn 的 SetWindowsHookEx 函数。您可以为键盘和鼠标消息安装线程特定过滤器。然后您可以将消息推送到您的维护队列并稍后手动访问它(如果您选择从钩子中删除该线程的公共队列中的相关消息,那么只有您的用户队列才会有消息)。不过,在您感兴趣的每种情况下,您也可以直接从 PeekMessage 开关直接推送到此使用队列。

于 2012-05-14T10:12:58.023 回答