国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關閉對話框,OnClose和OnCancel

2019-11-17 03:58:10
字體:
來源:轉載
供稿:網友
 我們知道,在對話框中,屏蔽ESC鍵自動退出可以選擇重載OnCancel為啞函數的方法:

     void CXXXXDlg::OnCancel()
     {
        // TODO: Add your specialized code here and/or call the base class

        //CDialog::OnCancel(); //disable OnCancel
     }

      但是,這樣一來,右上角的關閉按鈕也不起作用了,是因為點擊關閉按鈕時會自動調用CXXXXDlg::OnCancel()l從而完成對話框的關閉,由于CXXXXDlg::OnCancel()中什么也沒有做,因此對話框就無法關閉。修改這個bug需要重載OnClose消息函數:

      void CXXXXDlg::OnClose()
      {
            // TODO: Add your message handler code here and/or call default

            CDialog::OnCancel();  //add OnCancel here


            CDialog::OnClose();            
      }

        由于OnCancle實際上是調用Enddialog(IDCANCEL),所以也可以按照如下修改:

      void CXXXXDlg::OnClose()
      {
            // TODO: Add your message handler code here and/or call default

             EndDialog(IDCANCEL);  


            CDialog::OnClose();            
      }

      我們知道OnClose函數是WM_CLOSE消息的響應函數,但是為什么發送WM_CLOSE消息后會自動調用CXXXXDlg::OnCancel()?自己跟了一下代碼,大致梳理了一下流程:

           WM_CLOSE

     -> 進入void CXXXXDlg::OnClose()

     -> CDialog::OnClose()         

     -> void CXXXXDlg::OnClose()返回

     -> void CXXXXDlg::OnCancel()

      比較神奇的是 CDialog::OnClose() 函數:

      

      這個函數中不知道以何種方式告知系統在 CXXXXDlg::OnClose() 返回 后去調用 CXXXXDlg::OnCancel(),在調試中如果把這個函數注釋掉,則不會轉入CXXXXDlg::OnCancel()函數中。而且,對于CXXXXDlg::OnCancel()函數的調用是在CXXXXDlg::OnClose() 返回 后,如果采用消息,我覺得是否應該不會在返回后調用,而應該在消息發送后馬上處理。



本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/silvervi/archive/2009/12/17/5027100.aspx
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗定市| 柏乡县| 玛纳斯县| 资中县| 阿巴嘎旗| 南投县| 江北区| 山阴县| 合江县| 子长县| 密云县| 司法| 集贤县| 怀远县| 仁寿县| 徐闻县| 赣榆县| 丰台区| 汝州市| 九龙城区| 山东| 济宁市| 青铜峡市| 莆田市| 治多县| 左权县| 达尔| 广宗县| 满洲里市| 兰考县| 增城市| 湖北省| 招远市| 宿迁市| 大石桥市| 砚山县| 历史| 阜宁县| 上栗县| 临颍县| 抚松县|