总结MFC中OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
第一,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()之间的区别相关推荐
- onok oncancel onclose ondestroy
第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数. 从应用程序结构的角度,拿对话框 ...
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
总结OnOK().OnCancel().OnClose().OnDestroy()之间的区别 第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDest ...
- Spring MVC和REST中@RestController和@Controller注释之间的区别
Spring MVC中的@RestController注释不过是@Controller和@ResponseBody注释的组合. 它已添加到Spring 4.0中,以简化在Spring框架中RESTfu ...
- C#中的结构和类之间的区别
C#类和结构 (C# class and structure) In C# and other programming languages, structure and classes are use ...
- SQL 中的=,in,like之间的区别
SQL中的=,in,like之间的区别: 三者都可以用来进行数据匹配 .但三者并不相同. 等号是用来查找与单个值匹配的所有数据: IN 是 用来查找与多个值匹配的所有数据: 而 LIKE用来查找与一个 ...
- mysql insert into values select_mysql中insert语句中,value与values之间的区别?
你的位置: 问答吧 -> JAVA -> 问题详情 mysql中insert语句中,value与values之间的区别? mysql> select * from tt; +---- ...
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
目录(?)[+] cDialogonokenddialogdestroywindow区别 收藏 1摘要 2模式对话框的显示 3模式对话框的循环等待 4模式对话框的循环终止 5与OK和Cancle按钮的 ...
- OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数. 从应用程序结构的角度,拿对话框 ...
- 关于OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数.从应用程序结构的角度,拿对话框来说,红 ...
最新文章
- 卷积神经网络基础:(6)卷积神经网络原理
- 计算机视觉常用数据集总结:包括MS COCO、ImageNet、VOC、人脸识别、行人检测等...
- n 模块切换 node 版本无效的解决办法
- Python强大的格式化format
- haproxy mysql配置文件详解_HAProxy基础配置-haproxy的配置文件说明
- Java-线程间通信小结
- leetcode 205. 同构字符串
- 角落的开发工具集之Vs(Visual Studio)2017插件推荐
- 解析xml_Mybatis中mapper的xml解析详解
- linux 简单命令
- 应用挂载beegfs指定目录_BeeGFS源码分析1-元数据服务概要分析
- Bailian2709 求出e的值【数列求和】(POJ NOI0105-35)
- 05 jQuery的DOM操作
- 【转】onAttachedToWindow()在整个Activity生命周期的位置及使用
- 软件开发基本流程概述
- 《大师谈游戏设计——创意与节奏》【笔记一】
- 机器之心线上活动:虚拟现实(VR)与增强现实(AR)
- iOS 中可能用到的数学公式(绝对值、平方、取整、正余弦)
- python群发邮件
- typecho图标_handsome+Typecho美化过程【持续更新】包括踩坑解决办法