Ben*_*itz 7 c++ events winapi input
我的代码中有一个循环函数调用PeekMessage以检索事件.
目前它看起来像这样:
while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
// Process events
}
Run Code Online (Sandbox Code Playgroud)
现在我想在不同的位置来管理输入,这意味着我想检索信息,如WM_KEYDOWN,WM_MOUSEMOVE在不同的地方(鼠标和键盘事件),我的主回路的不同的时间.
PeekMessage的第三和第四个参数允许定义一个范围消息以返回的,所以我可以利用这一点,使用所提供的宏WM_KEYFIRST,WM_KEYLAST,WM_MOUSEFIRST和WM_MOUSELAST.但它不方便,因为我有两个范围来检查输入,因此剩下的所有内容都有三个范围.
最后一个参数是一个标志,我可以传递PM_REMOVE | PM_QS_INPUT输入.但是,我应该在另一个循环中传递什么,我想要获取所有其他消息?没有PM_QS_EVERYTHING_EXCEPT_INPUT宏......
这样做最优雅的方式是什么?
小智 1
您可以尝试使用“过滤器”。Win32 称之为“钩子”,请查看 msdn 的 SetWindowsHookEx 函数。您可以为键盘和鼠标消息安装线程特定的过滤器。然后,您可以将消息推送到维护队列,并稍后手动访问它(如果您选择从钩子中删除,您可以从该线程的公共队列中删除相关消息,这样只有您的用户队列才会有消息)。不过,在您感兴趣的每种情况下,您也可以直接从 PeekMessage 开关直接推送到此使用队列。