WindowProc 调用时序
WindowProc Invocation Timing
我是 win32 消息的新手。我想知道当 WindowProc 正在处理一条消息时,是否有可能被中断以处理另一条消息?下面举个例子,如果[A]和[B]都被执行了,WindowProc是不是可以中断处理新的WM_ACTIVATEand/orWM_ACTIVATEAPP消息(作为一个[A] 和 [B] 之间 ShowWindow 调用的结果)?如果这是可能的,是否有任何特定情况使它成为可能?
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;
...
}
感谢任何评论!
系统将从不在处理另一条消息时调用此回调函数,这仅仅是因为所有消息都被放入队列并且(您的代码或您使用的框架, 像 MFC
) 一个一个地出队,没有重叠。除非处理完一条消息,否则控件不会 return 返回到出队块。
事实上,您可以安全地将 window
代码视为单线程代码。如果您在单个应用程序中有 多个 windows 运行,它们都是 序列化的 并且仍然 运行在单个线程中。
事实上,如果您想 运行 您的 windows(或工作人员)彼此并行,则需要创建单独的线程。
没有。这就是 GUI 线程 的要点 - 它是一个线程一次做一件事。如果您正在处理消息,则不会调用 GetMessage
.
我是 win32 消息的新手。我想知道当 WindowProc 正在处理一条消息时,是否有可能被中断以处理另一条消息?下面举个例子,如果[A]和[B]都被执行了,WindowProc是不是可以中断处理新的WM_ACTIVATEand/orWM_ACTIVATEAPP消息(作为一个[A] 和 [B] 之间 ShowWindow 调用的结果)?如果这是可能的,是否有任何特定情况使它成为可能?
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;
...
}
感谢任何评论!
系统将从不在处理另一条消息时调用此回调函数,这仅仅是因为所有消息都被放入队列并且(您的代码或您使用的框架, 像 MFC
) 一个一个地出队,没有重叠。除非处理完一条消息,否则控件不会 return 返回到出队块。
事实上,您可以安全地将 window
代码视为单线程代码。如果您在单个应用程序中有 多个 windows 运行,它们都是 序列化的 并且仍然 运行在单个线程中。
事实上,如果您想 运行 您的 windows(或工作人员)彼此并行,则需要创建单独的线程。
没有。这就是 GUI 线程 的要点 - 它是一个线程一次做一件事。如果您正在处理消息,则不会调用 GetMessage
.