gpt4 book ai didi

c++ - Win32 并在 WindowProcedure 外捕获 WM_SIZE 消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:29 28 4
gpt4 key购买 nike

我有一个处理消息的函数,我在 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:

Messages and Message Queues

Subclassing Controls

关于c++ - Win32 并在 WindowProcedure 外捕获 WM_SIZE 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39342292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com