【发布时间】:2015-09-27 01:21:58
【问题描述】:
原来的问题:
尽管我的窗口过程函数能够检测到WM_CLOSE 消息并调用PostQuitMessage 并让Windows 继续使用DefWindowProc 处理窗口消息,但我有一个窗口在创建后无法立即关闭。
但是,通过拖动标题栏移动窗口后,似乎可以正常关闭了。
我的窗口过程函数的代码如下:
LRESULT CALLBACK OnEvent(HWND handle, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_QUIT:
{
printf("WM_QUIT\n");
break;
}
case WM_CLOSE:
{
printf("WM_CLOSE\n");
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(handle, message, wParam, lParam);
}
那么除了将WM_MOVE消息发送到我的窗口或在WM_CLOSE case块中使用exit(0)之外,如何确保我的窗口在创建后可以立即关闭?
新问题:
在将NULL 传递给GetMessageW 的hWnd 参数后,窗口现在可以正常关闭,从而回答了我之前的问题。
那么,为什么GetMessageW函数之前没有使用提供的唯一窗口句柄检索WM_QUIT消息,而不是使用NULL作为hWnd参数?
【问题讨论】:
-
未测试,调用
PostQuitMessage(0);而不是调用DefWindowProc获取消息WM_QUIT可能不好。 -
它可能对你有用。 msdn.microsoft.com/en-us/library/windows/desktop/… 并且,在
printf("WM_QUIT\n");之后,没有break;。好吗? -
WM_QUIT永远不会进入您的 WndProc,除非出现严重错误。 -
@gyu-don
DestroyWindow在我的主函数中的“GetMessage循环”之后已经被调用。