Windows桌面应用程序(1-2-2-5th) 关闭窗口

当用户关闭窗口时,该操作会触发一系列窗口消息。
用户可以通过单击关闭按钮或使用诸如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函数显示一个包含OKCancel按钮的模式对话框。如果用户点击确定,程序调用DestroyWindow。否则,如果用户单击Cancel,则将忽略对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_CLOSEWM_DESTROY消息的典型方法:
这里写图片描述
显示如何处理WM_CLOSE和WM_DESTROY消息的流程图

下一个
管理应用程序状态


原文链接:Closing the Window

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值