第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,

即WM消息响应函数。   从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框

中的“确定”、“取消”按钮则对应了CDialog。

第二,OnClose()和OnDestroy()
            在单视图程序中,根据<<深入浅出MFC>>所讲,程序退出时执行的操作顺序为(从点X按钮开始)
            (1)用户点击X退出按钮,发送了WM_CLOSE消息----->响应OnClose()
            (2)在WM_CLOSE消息的处理函数中,调用DestroyWindow()----->销毁与指定CWnd窗口对象关联的窗口,但未销毁CWnd对象
            (3)在DestroyWindow()中发送了WM_DESTROY消息----->窗口销毁后响应OnDestroy()
            (4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUIT消息,结束消息循环
            可以看到,程序的退出过程,是先响应OnClose(),然后响应OnDestroy(),在响应OnDestroy()之前,

窗口对象已经被销毁。OnDestroy()到底干了什么呢?它就像一个teller,先通知CWnd对象告诉它即将被销毁,

尔后OnDestroy的真正运行是在CWnd对象已经从屏幕上清除以后被调用的。

第三,OnOK()、OnCancel()()、OnClose()、OnDestroy()

CDialog::OnOK首先调用UpdateData(TRUE)将数据传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框;  
            CDialog::OnCancel只调用CDialog::EndDialog关闭对话框;   
            OnClose()是响应   WM_CLOSE的。

一定程度上可以说CDialog::EndDialog()和OnClose()完成类似的工作,但处理的机制不一样,

前者是CDialog的对象机制,后者是WM的消息映射机制。
            CDialog::EndDialog()-------->OnDestroy()
                             OnClose()-------->OnDestroy()
            EndDialog()和OnClose()属于“同级别”的,所以我们在按下OK按钮的时候,程序是不会执行OnClose()的,

但两种机制都必须经过OnDestroy()。

原文链接:http://blog.163.com/sky_sgx/blog/static/199439194201110943356741/

总结MFC中OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别相关推荐

  1. onok oncancel onclose ondestroy

    第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数.   从应用程序结构的角度,拿对话框 ...

  2. 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别

    总结OnOK().OnCancel().OnClose().OnDestroy()之间的区别 第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDest ...

  3. Spring MVC和REST中@RestController和@Controller注释之间的区别

    Spring MVC中的@RestController注释不过是@Controller和@ResponseBody注释的组合. 它已添加到Spring 4.0中,以简化在Spring框架中RESTfu ...

  4. C#中的结构和类之间的区别

    C#类和结构 (C# class and structure) In C# and other programming languages, structure and classes are use ...

  5. SQL 中的=,in,like之间的区别

    SQL中的=,in,like之间的区别: 三者都可以用来进行数据匹配 .但三者并不相同. 等号是用来查找与单个值匹配的所有数据: IN 是 用来查找与多个值匹配的所有数据: 而 LIKE用来查找与一个 ...

  6. mysql insert into values select_mysql中insert语句中,value与values之间的区别?

    你的位置: 问答吧 -> JAVA -> 问题详情 mysql中insert语句中,value与values之间的区别? mysql> select * from tt; +---- ...

  7. 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)

    目录(?)[+] cDialogonokenddialogdestroywindow区别 收藏 1摘要 2模式对话框的显示 3模式对话框的循环等待 4模式对话框的循环终止 5与OK和Cancle按钮的 ...

  8. OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别

    第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数.   从应用程序结构的角度,拿对话框 ...

  9. 关于OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别

    第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数.从应用程序结构的角度,拿对话框来说,红 ...

最新文章

  1. 卷积神经网络基础:(6)卷积神经网络原理
  2. 计算机视觉常用数据集总结:包括MS COCO、ImageNet、VOC、人脸识别、行人检测等...
  3. n 模块切换 node 版本无效的解决办法
  4. Python强大的格式化format
  5. haproxy mysql配置文件详解_HAProxy基础配置-haproxy的配置文件说明
  6. Java-线程间通信小结
  7. leetcode 205. 同构字符串
  8. 角落的开发工具集之Vs(Visual Studio)2017插件推荐
  9. 解析xml_Mybatis中mapper的xml解析详解
  10. linux 简单命令
  11. 应用挂载beegfs指定目录_BeeGFS源码分析1-元数据服务概要分析
  12. Bailian2709 求出e的值【数列求和】(POJ NOI0105-35)
  13. 05 jQuery的DOM操作
  14. 【转】onAttachedToWindow()在整个Activity生命周期的位置及使用
  15. 软件开发基本流程概述
  16. 《大师谈游戏设计——创意与节奏》【笔记一】
  17. 机器之心线上活动:虚拟现实(VR)与增强现实(AR)
  18. iOS 中可能用到的数学公式(绝对值、平方、取整、正余弦)
  19. python群发邮件
  20. typecho图标_handsome+Typecho美化过程【持续更新】包括踩坑解决办法

热门文章

  1. 荣耀X20SE和华为nova8se参数对比哪个好 荣耀X20SE和华为nova8se的区别
  2. UWB信号对服务器有没有干扰,UWB组网定位的系统及方法技术方案
  3. 迅雷(SVIP不限速)去广告绿色精简版for mac/win
  4. 世界十大自然奇观,中国入选的是哪一个?
  5. 数据仓库搭建ADS层
  6. 5月中旬最科技青桐汇来袭,来看武汉最新最前沿的科技产品!
  7. 在平面设计中,怎样利用背景让主体明显
  8. 简短心情说说致自己,给自己最美的一句话
  9. python学习----网页图片文字识别(简单)
  10. CopyFile函数