我是win32消息的新手。我想知道当WindowProc处理消息时,它是否可能被中断以处理另一条消息?以下面的例子为例,如果同时执行[A]和[B],是否可以中断WindowProc以处理[A]和[A]之间的新WM_ACTIVATE和/或WM_ACTIVATEAPP消息(作为ShowWindow调用的结果) [B]?如果可能的话,是否有任何具体情况如此?
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
{
...
case WM_ACTIVATEAPP:
if (wParam == FALSE)
{
// [A] Do something that would trigger a WM_ACTIVATE or WM_ACTIVATEAPP message to be queued to the message queue
ShowWindow(hwnd, SW_MINIMIZE);
// [B] Modify Window Styles
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
}
break;
...
}
感谢您的任何评论!
答案 0 :(得分:1)
没有。这就是 GUI线程的要点 - 它是一次做一件事的单个线程。如果您正在处理邮件,则不会调用GetMessage
。
答案 1 :(得分:0)
系统将从不调用此回调函数,因为它正在处理另一条消息,因为所有消息都被放入队列中(您的代码或您使用的框架,如{{1} }})一个接一个地出列,没有重叠。除非一条消息完成处理,否则控件不会返回到出列块
实际上,您可以安全地将MFC
代码视为单线程。如果您在单个应用程序中运行多个窗口,则它们都是序列化,并且仍在单个线程中运行。
事实上,如果你想让你的窗口(或工人)彼此并行运行,你需要创建单独的线程。