好的,所以我有我的主窗口程序(简化):
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
if(!loadFiles())
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
return 0;
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
loadFiles() 是一个读取一些文本文件的函数。如果文件丢失,它会发布一条错误消息,然后返回 false。我通过发送 WM_CLOSE 消息来处理这个问题,该消息发送 WM_DESTROY? 该程序调用 PostQuitMessage(0) 并且..没有。该进程仍处于后台,现在在核心 1 上使用 100% CPU。这是我的消息循环:
MSG Msg;
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
非常简单,我环顾四周,看到人们使用各种不同的循环,大多数使用 PeekMessage() 函数。值得注意的是,我有几个包含不同控件的子窗口,当用户选择不同的选项卡时,我会显示和隐藏它们,但我认为这并不重要,因为 PostQuitMessage(0) 应该将 WM_QUIT 发布到消息队列中,这也会破坏子窗口,对吗?有什么帮助吗?谢谢