关闭窗口

1. MFC程序的死亡相对于初生来说要简单的多,主要是以下几步:    
    1.使用者通过点击File/Close或程序窗口右上角的叉号发出WM_CLOSE消息。    
    2.程序没有设置WM_CLOSE处理程序,交给默认处理程序。    
    3.默认处理函数对于WM_CLOSE的处理方式为调用::DestoryWindow,并因而发出WM_DESTORY消息。    
    4.默认的WM_DESTORY处理方式为调用::PostQuitMessage,发出WM_QUIT。    
    5.CWinApp::Run收到WM_QUIT后结束内部消息循环,并调用ExinInstance函数,它是CWinApp的一个虚拟函数,可以由用户重载。    
    6.最后回到AfxWinMain,执行AfxWinTerm,结束程序。    
  ---------------------------------------------------  
  有时你看到有的程序当点右上角的叉的时候没有关闭程序而是最小化了,就是因为它重载了OnClose,把默认的发送Destory消息给删掉了


2.

  WM_CLOSE是关闭窗口的  
  WM_DESTROY是销毁窗口
  windows的一般处理是PostQuitMessage(0) 即发送一个WM_QUIT消息,即退出消息循环

  WM_CLOSE   消息处理中,请示用户关闭应用程序,  
  如果不关闭,则可以不做任何处理;  
  如果要关闭,则需要调用   DestroyWindow      (DestroyWindow先把窗口破坏掉,使用户看不到窗口。但是窗口破坏后,应用程序并没有结束,于是DestroyWindow再接再励,送出了一个WM_DESTROY消息)
  调用DestroyWindow,则会发出另外一个消息   WM_DESTROY    
  WM_DESTROY   消息处理中,则调用PostQuitMessage(0)  
  调用PostQuitMessage(0),则会又发出另外一个消息WM_QUIT  
  由WM_QUIT消息来结束消息循环,才能真下退出应用程序。   

 

WM_QUIT消息非常特殊,她使GetMessage函数返回0,从而结束了消息循环,  
  应用程序从此结束
 

3.

case   WM_CLOSE:  
  if(IDYES   !=   MessageBox(NULL,   "你确定要退出吗?",   "警告",MB_YESNO|MB_ICONWARNING))  
   
    {  
    //Ï£ÍûÈüÌÐø´°¿ÚÏÔʾ£¬ÏÂÃæµÄ·½·¨ÎÞЧ  
    ShowWindow(hwnd,   SW_SHOW);    
    SetForegroundWindow(hwnd);  
    //UpdateWindow(hwnd);  
     
    return   0;  
     
    }  

还有,记得执行完你的语句后,要return  
  break的话,在结束你的窗口函数的时候,如果有   return   DefWindowProc   (hwnd,   message,   wParam,   lParam)   ;  
  那么用默认的处理函数处理wm_close  
  那么你又白做了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值