本文主要是介绍WM_CLOSE,WM_DESTROY,WM_QUIT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
WM_CLOSE:
在系统菜单里选择了“关闭”或者点击了窗口右上角的“X”按钮,窗口过程就会收到WM_CLOSE。
DefWindowProc对 WM_CLOSE的处理是调用DestroyWindow。
WM_DESTROY:
DestroyWindow完成窗口的清理工作,最后向窗口过程发送WM_DESTROY。对于 WM_DESTROY,DefWindowProc不会处理。
WM_QUIT:
WM_QUIT消息不与窗口关联,因此永远不会通过窗口的窗口过程接收。 它仅由 GetMessage 或 PeekMessage 函数检索,这两个函数收到WM_QUIT后的返回值是0,即退出消息循环。
请勿使用 PostMessage 函数发布WM_QUIT消息;使用 PostQuitMessage。
https://learn.microsoft.com/zh-cn/windows/win32/winmsg/wm-close
一般的使用方法:
点击关闭按钮产生WM_CLOSE消息,在WM_CLOSE消息处理代码中调用DestroyWindow,DestroyWindow函数执行完毕产生WM_DESTROY消息,在WM_DESTROY消息中调用PostQuitMessage退出消息循环。
窗口处理程序代码:
LRESULT CALLBACK WindowProc(__in HWND hWindow,__in UINT uMsg,__in WPARAM wParam,__in LPARAM lParam)
{switch (uMsg){case WM_CLOSE:DestroyWindow(hWindow);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWindow, uMsg, wParam, lParam);}return 0;
}
消息循环代码:
MSG msg;while ((ret = GetMessage(&msg, 0, 0, 0)) != 0) {if (ret == -1) {return -1;}if (ret == 0){printf("hello\r\n");break;}ret = IsDialogMessage(dialog->m_hwnd, &msg);if (ret){TranslateMessage(&msg);DispatchMessage(&msg);}}
这篇关于WM_CLOSE,WM_DESTROY,WM_QUIT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!