总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
来源:互联网 发布:java ssh远程登录 编辑:程序博客网 时间:2024/05/16 12:44
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wind1987321/archive/2009/09/21/4576585.aspx
第一,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()
- OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结MFC中OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
- 总结MFC中OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- JAVA获取操作系统的信息
- 黑马程序员--Java学习07--面向对象
- android camera开发笔记
- SSO单点登录 1实现机制 ▪ 系统共享 ▪ 信息识别 2WEB-SSO 3其他含义 4技术应用 ▪ 技术实现[百度百科]
- 基于心理学视角论述游戏排行榜设计
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 用选择法对10个整数由大到小排序
- 杂记
- CENTOS 修改MYSQL文件到内存盘
- 好久没刷题了,有点生疏了……
- Makefile包含的东西与工作执行步骤
- 人脸数据库汇总
- boost1.55 安装使用教程 windows
- 流浪在橄榄绿里的思念