原来的问题:
我不能不管我的窗口过程函数创建能够检测WM_CLOSE
消息,并呼吁PostQuitMessage
并让Windows后立即关闭窗口继续使用DefWindowProc
处理窗口消息。窗口在Win32应用程序将无法正常关闭
但是,通过拖动标题栏移动窗口后,它似乎能够正常关闭。
为我的窗口过程函数的代码如下:
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
情况下块使用exit(0)
,我怎么能保证我的窗口可以创建后立即关闭?
新问题:
传递NULL
到GetMessageW
的hWnd
参数,而不是我的窗口句柄后,窗口关闭现在正确回答,因此我刚才的问题。
因此,为什么GetMessageW
功能以前没有,唯一的窗口提供手柄检索WM_QUIT
消息,而不是使用NULL
为hWnd
参数?
未测试,调用'PostQuitMessage(0);'和不调用'DefWindowProc'用于消息'WM_QUIT'可能不太好。 – MikeCAT
它可能对您有用。 https://msdn.microsoft.com/en-us/library/windows/desktop/ff381396%28v=vs.85%29.aspx并且在'printf(“WM_QUIT \ n”);'之后,没有'打破;'。可以吗? –
除非出现严重错误,否则'WM_QUIT'将永远不会传递到您的WndProc。 –