关闭对话框,OnClose和OnCancel

关闭对话框,OnClose和OnCancel

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

      我们知道,在对话框中,屏蔽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() 返回 后,假设採用消息,我认为是否应该不会在返回后调用,而应该在消息发送后立即处理。

      

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 破14亿,Python分析我国存在哪些人口危机!「建议收藏」

    破14亿,Python分析我国存在哪些人口危机!「建议收藏」一、背景二、爬取数据三、数据分析1、总人口2、男女人口比例3、人口城镇化4、人口增长率5、人口老化(抚养比)6、各省人口7、世界人口四、遇到的问题遇到的问题1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST702、2019年数据没有放上去,可以手动添加上去3、将数据进行行列转换4、列名…

    2022年5月13日
    32
  • C程序编译过程浅析

    前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。我现在一般都是用gcc,所以自然以GCC编译hellworld为例,简单总

    2021年12月25日
    53
  • 纠结应该先学Python还是Java?看完就有数了

    纠结应该先学Python还是Java?看完就有数了准备学习编程前,你一定会打开电脑搜索一下“先学Python还是先学Java?”扑面而来的是海量回答。如果你问一名Java程序员,肯定会建议你先学Java,因为他们认为Python像个乳臭未干的黄毛小子。但如果你问Python程序员,可能会得到一个完全相反的答案,他们认为Java是刻板啰嗦的老大爷,而人生苦短,我用Python。但别担心,今天我们将会从语言特色学习曲线职业方向市场需求…

    2022年7月8日
    19
  • 《javascript高级编程》读书笔记(两)javascript基本概念

    《javascript高级编程》读书笔记(两)javascript基本概念

    2022年1月11日
    35
  • Kong网关初探_API网关

    Kong网关初探_API网关安装Kong安装文档Kong开源版不提供dashboard支持,只有Kong企业版才有该功能。但有第三方控制台Konga同样可以友好地管理KongAdminAPI对象,快速安装如下:dockerrun-d-p1337:1337\–namekonga\–network=kong-net\-eDB_ADAPTER=postgres\-eDB_HOST=kong-database\-eDB_PORT=5432\-eDB_USER=kong\

    2022年9月10日
    0
  • 微信公众平台 获取用户openid

    微信公众平台 获取用户openid今天做微信公众号获取用户的openid,圆满成功,特此来一发。 第一步:理解逻辑。 1:获取openid的逻辑获得微信的openid,需要先访问微信提供的一个网址:这个网址名为url1,下面有赋值。通过这个网址,微信用来识别appid信息,在这个网址中,有一个属性redirect_uri,是微识别完appid后,进行跳转的操作,可以是网页,也可以是servlet,我这里用的是…

    2022年6月26日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号