总结OnOK、OnCancel、OnDestroy函数之间的区别
来源:互联网 发布:小受重生 耽美网络剧 编辑:程序博客网 时间:2024/06/15 05:46
第一,OnOk()和OnCancel()是CDialog基类的成员函数,即ID为ID_OK和ID_CANCEL的按钮的通知消息的响应函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数
第二,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_QUITT消息,结束消息循环
可以看到,程序的退出过程,是先响应OnClose(),然后响应OnDestroy()。OnDestroy中调用PostQuitMessage()发送WM_QUIT消息结束消息循环。
如果没有重定义OnClose函数的话
在对话框程序中,
1)用户点击X关闭按钮,调用的是CDialog::OnCancel函数
(2)在CDialog::OnCancel的处理函数中,调用CDialog::EndDialog关闭对话框;销毁与指定CDialog对象关联的对话框,但没有销毁CDialog对象
(3)在CDialog::EndDialog中发送了WM_DESTROY消息———–>窗口销毁后响应OnDestroy();
(4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUITT消息,结束消息循环
可以看到,程序的退出过程,是先响应OnCancel(),然后响应OnDestroy()。OnDestroy中调用PostQuitMessage()发送WM_QUIT消息结束消息循环。
第三,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()
所以我们在按下cancel按钮的时候,程序不会执行OnClose(),而是调用了直接调用了CDialog::EndDialog(),然后调用了OnDestroy()
- 总结OnOK、OnCancel、OnDestroy函数之间的区别
- 总结OnOK、OnCancel、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之String,StringBuffer与StringBuilder三者之间的区别
- 欢迎使用CSDN-markdown编辑器
- C++标准库中的数学函数。
- mysql Explain详解,优化sql的时候查看sql性能瓶颈
- C++宏定义详解
- 总结OnOK、OnCancel、OnDestroy函数之间的区别
- 利用JS-XLSX插件 用JS读取excel数据
- 初学者的Selenium自动化测试指南,基于Python(四)——常用鼠标事件
- ImageNet 2012 中文标签(Chinese Labels)
- 图像融合(五)-- 梯度金字塔
- 兼容IE8 addEventListener、removeEventListener 函数
- Oracle中的约束
- Android 编码规范
- fdisk -l显示信息详解