我有一个处理消息的函数,我在WindowProcedure之外捕获某些消息来触发想要的行为.
问题是虽然看起来其他消息似乎正在按需工作,但WM_SIZE由于某些原因我无法捕捉到消息.
WM_SIZE在WindowProcedure中可以看到,但我找不到我的函数没有看到它的原因.我读取当前的方法有问题HWND吗?
目前的功能是:
// OS MESSAGES
int OSMessages(void)
{
MSG msg;
HWND actwnd = GetActiveWindow();
if ( PeekMessage(&msg, actwnd, 0, 0, PM_REMOVE) )
{
if (msg.message == WM_QUIT)
{
printf("QUIT");
return -1;
}
else if (msg.message == WM_SIZE)
{
printf("RESIZE");
return 1;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
消息循环只能看到发布到调用线程的消息队列的消息. WM_SIZE但是,它不是已发布的消息,而是已发送的消息.发送的消息直接传递到窗口的消息过程,而根本不经过消息队列(尽管消息循环对发送的消息何时传递给消息过程有一些影响).
这就是你的消息循环没有看到的原因WM_SIZE.如果需要,您必须使用SetWindowsLong/Ptr()或SetWindowsSubclass()在您自己的窗口过程中挂钩目标窗口本身.
有关详细信息,请参阅MSDN:
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |