我的代码中有一个循环函数,它调用PeekMessage
来检索事件。
目前它看起来像这样:
while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
// Process events
}
现在我想在不同的位置管理输入,这意味着我想在不同的地方,在不同的位置检索诸如WM_KEYDOWN
,WM_MOUSEMOVE
(鼠标和键盘事件)之类的消息我的主循环的时间。
PeekMessage
的第三个和第四个参数允许定义要返回的消息范围,因此我可以使用提供的宏WM_KEYFIRST
,WM_KEYLAST
,WM_MOUSEFIRST
和WM_MOUSELAST
。但它不方便,因为我有两个范围来检查输入,因此剩下的一切都有三个范围。
最后一个参数是一个标志,我可以传递PM_REMOVE | PM_QS_INPUT
作为输入。但是,我应该在另一个循环中传递什么,我想要获取所有其他消息?没有PM_QS_EVERYTHING_EXCEPT_INPUT
宏...
这样做最优雅的方法是什么?
答案 0 :(得分:1)
您可以尝试使用“过滤器”。 Win32调用“钩子”,看看msdn的SetWindowsHookEx函数。您可以为键盘和鼠标消息安装特定于线程的过滤器。然后,您可以将消息推送到维护队列并稍后手动访问它(知道如果您从钩子中选择了该线程的公共队列中的相关消息,那么只有您的用户队列将具有消息)。 但是,在您感兴趣的每种情况下,您也可以直接从PeekMessage开关直接推送到此use-queue。