c++ - WM_DESTROY 消息混淆
问题描述
拥有这样一个简单的 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) ---
。
由于没有收到消息,消息如何WM_DESTROY
传递给应用程序?PeekMessage
解决方案
PeekMessage
(或GetMessage
)自行分派(来自其他线程)发送的消息而不返回它们。它只返回已发布的消息。如果消息是由同一个线程发送的,它甚至不会通过PeekMessages
,它实际上是一个直接的窗口过程调用。WM_DESTROY
已发送。
顺便说一句,避免不将系统消息传递给DefWindowProc
,包括WM_DESTROY
.
推荐阅读
- angular - 以角度创建模型类的最佳方法是什么?
- javascript - React-native App 在发布模式下崩溃?
- javascript - 注销时重置 redux 状态
- php - 如何在 SimpleSAMLPhp + (Laravel App + SP) 中使用 IDP 初始化 SSO 流
- azure - azure kubernetes-internal load balancer 通过 dns 名称而不是 ip 地址访问
- javascript - 将值分配给 React js 中另一个键值的状态对象键
- c - Makefile 作为根
- c - 分段错误,但我找不到在哪里
- c# - 在特定时间间隔后自动从 Internet evo 拨打 ussd
- c - 如何左对齐 32 位整数?