WM_CLOSE,WM_DESTROY,WM_QUIT的不同

    有三个消息看起来差不多,都是处理关闭的事情的,它们是WM_CLOSE,WM_DESTROY,和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
   );
  
   1. 当收到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
   }
  
   2. WM_DESTROY消息有点儿不同,它 是窗口正在关闭时发出的当收到WM_DESTROY消息的时候,窗口已经从视觉上被删除;但一个主窗口被关闭,并不意味着应用程序结束了,因为它可以在没有窗口的条件下继续运行。
  
   3. 然而,当一个用户关闭了主窗口,并希望这意味着是要结束应用程序时,如果你希望真的这么做,那么在收到WM_DESTROY消息的时候,你必须发出一个WM_QUIT消息

   4.  WM_ QUIT是应用程序结束发出的消息,一般可以看成进程被kill掉的情况。
 
       5. PostQuitMessage是向系统发出要终止线程的请求,在终止线程前系统还要做些内存的清理工作。
 
我们关闭一个程序时是发送WM_CLOSE消息(函数SendMessage?),然后调用DestroyWindow函数,调用DestroyWindow时系统会向程序发WM_DESTROY消息,终止整个程序。
*****************************************************************************************************************************************
一个对话框向另一个对话框发窗口关闭消息
对话框A CADlg ; 对话框B CBDlg

A中声明B为成员变量 CBDlg m_BDlg;

A发送消息关闭B :SendMessage(m_BDlg.GetSafeHwnd(), WM_CLOSE, 0, 0); 
            或者直接:m_BDlg.SendMessage(WM_CLOSE);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值