我尝试使用 Win32 API 进行编程,但遇到了一种我没有预料到的异常行为,这让我有点困惑。在我的 while 循环中:
while (IsWindow(hwnd)) {
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg); DispatchMessage(&msg);
}
OutputDebugStringA("loop continues\n");
}
只有当我不移动窗口时,一切都会按预期工作,但是当我尝试通过拖动标题栏来移动窗口时,循环由于某种原因不会继续。我认为这种情况正在发生,因为我正在尝试使用
PeekMessage
循环来实现 while
,但即使使用 if
语句也会显示相同的行为。
我想知道发生了什么以及如何才能执行循环的其余部分。我不知道消息队列和调度是如何工作的,所以我需要一些帮助。
在多种情况下,系统会为您启动模式消息循环。例如,当进入菜单或显示模式对话框时,就会发生这种情况。
WM_ENTERSIZEMOVE
消息)。这就是系统设计的工作方式。您的模态循环将“暂停”(通过嵌套模态循环),直到移动或调整大小操作结束。