C++ Win32 PostQuitMessage(0)不工作? CPU @ 100%
行,所以我有我的主窗口(简体):C++ Win32 PostQuitMessage(0)不工作? CPU @ 100%
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)和..什么也没有。该进程仍然坐在后台,现在用100%的CPU核心1.这是我的消息循环:
MSG Msg;
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
使用各种不同的循环很简单,我环顾四周,看到的人,最有PeekMessage()函数..其值得注意的是我有几个子窗口包含不同的控件,当用户选择不同的标签时,我显示并隐藏它们,但我不认为这很重要,因为PostQuitMessage(0)应该将WM_QUIT发布到消息队列,它会破坏孩子的窗户以及?任何帮助?谢谢
根据MSDNWM_CREATE
在CreateWindow
期间发送。所以你在创作过程中正在摧毁窗户。我不确定这是否应该起作用。另外,为什么这么复杂?该文档说
如果一个应用程序处理此消息,它应该返回零到 继续创建该窗口。 如果应用程序返回-1,则销毁窗口 ,并且CreateWindowEx或CreateWindow函数 返回NULL句柄。
所以才返回-1万一loadFiles()
失败,处理CreateWindow
返回NULL
相应。
这正是我正在寻找的,而不是尝试在创建过程中发送销毁消息,返回-1将无法创建窗口的第一位..谢谢你,它的工作 – 2013-04-30 17:20:56
您显示的代码没有问题,所以它必须是您尚未显示的代码的问题。使用调试器来找出代码卡住的位置。 – 2013-04-30 03:54:01
在你的'WM_DESTROY'和'WM_CASE'的情况下放置'return 0;'是没有意义的,因为你已经在它们的下面声明了'break',最终在中断后返回0。我没有看到你的代码有什么问题。也许它与你的其他代码有关? – CLearner 2013-04-30 05:30:33
尝试使用'PostMessage()'而不是'SendMessage()'发送'WM_CLOSE'? – 2013-04-30 07:28:11