我们知道,在对话框中,屏蔽ESC键自己主动退出能够选择重载OnCancel为哑函数的方法:

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

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

     }

可是,这样一来,右上角的关闭button也不起作用了,是由于点击关闭button时会自己主动调用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()
返回

后,假设採用消息,我认为是否应该不会在返回后调用,而应该在消息发送后立即处理。

网上找了非常久也没有得到答案,临时记录在此,或许哪天自己明确了,或是被牛人发现了给出解答。

关闭对话框,OnClose和OnCancel的更多相关文章

  1. 20151124001 关闭C#主窗体弹出是否关闭对话框

    关闭C#主窗体弹出是否关闭对话框 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e)        {   ...

  2. JQuery Dialog 禁用X按钮关闭对话框,-摘自网络

    JQuery Dialog 禁用X按钮关闭对话框,禁用ESC键关闭代码如下:$("#div1").dialog({   closeOnEscape: false,   open: ...

  3. 关闭C#主窗体弹出是否关闭对话框

    在开发系统时,常常有这样一个问题,就是当关闭主窗体,也即退出系统时,如果想提示是否关闭,以免误操作,可以在主窗体的Main_FormClosing事件中添加一个对话框,代码如下: private vo ...

  4. Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框

    原文出处:博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知,AlertDialog类用于显示对话框 ...

  5. mui 对话框 点击按钮不关闭对话框的办法

    目前版本的 mui.js 点击对话框的按钮只能关闭对话框 做如下修改 点击按钮后return false 即可

  6. Android——点击对话框上按钮不关闭对话框

    有时候我没可能需要在点击按钮进行一些检测,但是并不想关闭次对话框(系统默认点击任何一个按钮则关闭对话框),处理方法如下:在点击事件下添加如下代码: try { Field field = dialog ...

  7. vue + ElementUI 关闭对话框清空验证,清除form表单

    前面跟大家提到过 elementUI验证的问题,那么今天就来看看 点击对话框和关闭按钮 怎么清空验证,清空form表单,避免二次点击还会有 验证错误的提示 1.首先在你的对话框 取消按钮 加一个cli ...

  8. Android——点击对话框上button不关闭对话框

    有时候我没可能须要在点击button进行一些检測.可是并不想关闭次对话框(系统默认点击不论什么一个button则关闭对话框),处理方法例如以下:在点击事件下加入例如以下代码: try { Field  ...

  9. MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法

    http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序  屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下 ...

随机推荐

  1. CSS3------background-size(背景图片尺寸属性)

    background-size 可以设置背景图片的大小,数值包括 长度length和百分比percentage. 并且会根据背景原点位置 background-origin 设置其图片覆盖的范围.那么 ...

  2. 加密算法 - RSA算法二

    RSA算法原理(二)  声明: 本文转自阮一峰 (http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html) 有了这些知识, ...

  3. 文档学习 - UILabel - 属性详解

    #import "ViewController.h" @implementation ViewController - (void)viewDidLoad { [super vie ...

  4. XMLHttpRequest 使用概括

    ***********************************************XMLHttpRequest对象初始化:********************************* ...

  5. nutch 很多url unfetched的原因

    bin/hadoop jar apache-nutch-1.7.job org.apache.nutch.crawl.CrawlDbReader crawl/crawldb -stats -sort ...

  6. bzoj 4066: 简单题 kd-tree

    4066: 简单题 Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 234  Solved: 82[Submit][Status][Discuss] De ...

  7. Android 常用权限

    添加WiFi以及访问网络的权限: <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ...

  8. 在使用Ibatis查询数据返回时,报如下错误:java ibatis The error happened while setting a property on the result object

    问题: 在使用Ibatis查询数据返回时,报如下错误: [com.show.add.proxy.SqlMapClientTemplateProxy]com.ibatis.common.jdbc.exc ...

  9. HTML5的Server-Sent Events功能的使用

    客户端代码示例 //创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL. var source = new EventSource("http://localhos ...

  10. xbmc

    XBMC是一个优秀的自由和开源的(GPL)媒体中心软件.XBMC最初为Xbox而开发,可以运行在Linux.OSX.Windows.Android4.0系统.XBMC能够播放几乎所有流行的音频和视频格 ...