我有一个处理消息的函数,我在 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;
}
最佳答案
消息循环只能看到发布到调用线程的消息队列的消息。但是,WM_SIZE
不是已发布的消息,而是已发送 的消息。已发送的消息直接传递到窗口的消息过程,根本不经过消息队列(尽管消息循环对何时将已发送的消息传递到消息程序)。
这就是为什么您的消息循环看不到 WM_SIZE
的原因。如果需要,您必须使用 SetWindowsLong/Ptr()
对目标窗口本身进行子类化。或 SetWindowsSubclass()
Hook 您自己的窗口过程。
有关详细信息,请参阅 MSDN:
关于c++ - Win32 并在 WindowProcedure 外捕获 WM_SIZE 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39342292/