我的代码中有一个循环函数,它调用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宏...
最优雅的方式是什么?
发布于 2012-05-14 18:12:58
你可以尝试使用“过滤器”。Win32称之为“钩子”,看看msdn的SetWindowsHookEx函数。您可以为键盘和鼠标消息安装特定于线程的过滤器。然后,您可以将消息推送到您维护的队列中,并在以后手动访问它(知道您可以从该线程的公共队列中删除相关消息,如果您选择的话,可以从钩子中删除相关消息,这样只有您的用户队列才会拥有这些消息)。不过,在您感兴趣的每种情况下,您也可以直接从PeekMessage交换机直接推送到这个使用队列。
https://stackoverflow.com/questions/10568779
复制相似问题