拥有这样一个简单的 Win 应用程序:
bool continueRunning = true;
...
int APIENTRY wWinMain(...) {
while (continueRunning) {
PeekMessage(&msg, 0, 0, 0, PM_REMOVE);
TranslateMessage(&msg);
DispatchMessage(&msg);
if (WM_DESTROY == msg.message) {
OutputDebugString(L"--- WM_DESTROY (WinMain) ---\n");
}
}
}
...
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_DESTROY:
OutputDebugString(L"--- WM_DESTROY (WndProc) ---\n");
continueRunning = false;
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
我收到了 --- WM_DESTROY (WndProc) ---
消息,但没有 --- WM_DESTROY (WinMain) ---
。
由于 PeekMessage
未收到消息 WM_DESTROY
,如何将其传递到应用程序?
最佳答案
PeekMessage
(或GetMessage
)自行分派(dispatch)发送的消息(从其他线程)而不返回它们。它仅返回已发布的消息。如果消息是由同一线程发送的,则它甚至不通过 PeekMessages,它实际上是直接窗口过程调用。 WM_DESTROY
已发送。
顺便说一下,避免不将系统消息传递给 DefWindowProc
,包括 WM_DESTROY
。
关于c++ - WM_DESTROY消息困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65567088/