WM_DESTROY,WM_CLOSE,WM_QUIT的联系与区别

编程 同时被 2 个专栏收录
216 篇文章 1 订阅
106 篇文章 0 订阅

转自:https://blog.csdn.net/ankangyanghushi/article/details/51892389

WM_DESTROY, WM_CLOSE, WM_QUIT
WM_DESTROY 是关闭程序的    
WM_CLOSE   是关闭窗口的  
WM_QUIT    是关闭消息环的

以下是程序结束的过程:
1、使用者按[File/Close],系统发出WM_CLOSE消息
2、Frame把这条消息直接发给预处理程序
3、预处理程序发出WM_DESTROY消息
4、预处理程序收到WM_DESTROY后执行PostQuitMessage,发出WM_QUIT.
5、GetMessage收到这条消息后就推出消息循环,程序结束。

有三个消息看起来差不多,都是处理关闭的事情的。它们是WM_DESTROY,WM_CLOSE,和WM_QUIT。它们的确很相似,但你需要知道它们之间的不同!一个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出。你知道让用户作确认或有错误出现或有什么应该注意的事情发生的时候,往往弹出一个消息框。
  插播:
   消息框
   int MessageBox(
   HWND hWnd, // handle of owner window
   LPCTSTR lpText, // address of text in message box
   LPCTSTR lpCaption, // address of title of message box
   UINT uType // style of message box
   );
  
  * 当收到WM_CLOSE消息,你可以做两件事儿。一件是你接受默认的处理返回一个值,你若这样做了,应用程序或窗口按照计划关闭;再者,你返回0,应用程序或窗口将保持原样。以下是代码的基本部分:
   if (msg == WM_CLOSE)
   {
   if (MessageBox(hMainWindow, "Are you sure want to quit?", "Notice", MB_YESNO | MB_ICONEXCLAMATION) == IDNO)
   return(0);
   // otherwise, let the default handler take care of it
   }
  
  * WM_DESTROY消息有点儿不同。它是窗口正在关闭时发出的。
   当得到WM_DESTROY消息的时候,窗口已经从视觉上被删除。
   一个主窗口被关闭,并不意味着应用程序结束了,它将在没有窗口的条件下继续运行。
  
  * 然而,当一个用户关闭了主窗口,也就意味着他要结束应用程序,所以如果你希望应用程序结束,在收到WM_DESTROY消息的时候,你必须发出一个WM_QUIT消息。
   WM_QUIT是应用程序结束发出的消息,一般可以看成进程被kill掉的情况.

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值