Windows编程文章翻译(1-5th)关闭窗口

2017-12-16 08:28:36来源:CSDN作者:qq_37422196人点击

分享

父文章:你的第一个Windows桌面应用程序
上一篇文章:绘图
原文链接:Closing the Window


当用户关闭窗口时,会触发一系列窗口消息。
用户可以通过单击关闭按钮或使用键盘快捷键(如ALT + F4)来关闭应用程序窗口。任何这些操作都会导致窗口收到WM_CLOSE消息。WM_CLOSE消息使您有机会在关闭窗口之前提示用户。如果你真的想关闭窗口,调用DestroyWindow函数。否则,只需从WM_CLOSE消息中返回零,操作系统将忽略该消息而不销毁该窗口。
这里是一个程序如何处理WM_CLOSE的例子。

case WM_CLOSE:    if(MessageBox(hwnd,L"Really quit?",L"My application",MB_OKCANCEL)==IDOK)        DestroyWindow(hwnd);    // Else: User canceled. Do nothing.    return 0;

在这个例子中,MessageBox函数显示一个包含确定取消按钮的模式对话框。如果用户单击确定,该程序调用DestroyWindow。否则,如果用户单击取消,则将忽略对DestroyWindow的调用,并且窗口保持打开状态。在任何情况下,返回零表示您处理了该消息。
如果你想在不提示用户的情况下关闭窗口,你可以直接调用DestroyWindow而不用调用MessageBox。然而,在这种情况下有一个捷径。回想一下,DefWindowProc执行任何窗口消息的默认操作。在WM_CLOSE的情况下,DefWindowProc自动调用DestroyWindow。这意味着,如果在switch语句中忽略WM_CLOSE消息,则该窗口默认销毁。
当一个窗口即将销毁时,它会收到一个WM_DESTROY消息。该消息是在窗口从屏幕上移除之后,但在销毁之前(特别是在任何子窗口被销毁之前)发送的。
在您的主应用程序窗口中,您通常会通过调用PostQuitMessage来响应WM_DESTROY。

case WM_DESTROY:    PostQuitMessage(0);    return 0;

我们在窗口消息部分说过,PostQuitMessage在消息队列中放置了一个WM_QUIT消息,导致消息循环结束。
以下是一个流程图,显示处理WM_CLOSE和WM_DESTROY消息的典型方法:
这里写图片描述
显示如何处理WM_CLOSE和WM_DESTROY消息的流程图

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台