OnOK() OnCancel() OnClose OnDestroy()之间的区别

MFC中对于有界面的程序来说,比如对话框,单文档程序等等,当用户退出程序的时候,用户看到的是嗖的一下界面消失了,但是对于程序员来说,界面消失要响应其对应的函数,才能做到真正的杀死进程.MFC中退出程序基本是四个消息响应,下面来详细说一下之间的联系和区别:
1.OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。(这一大段是转别人的)
也就是说,一开始,创建一个MFC程序的时候会用两个按钮,一个取消一个确定,只有这两个按钮才会去响应所谓的CDialog对应的OnOK()和OnCancel()函数,而点击右上角的红叉会响应WM消息响应.

2.基本的生命周期是这样的一个顺序

OnClose → OnOk|OnCancel → DestroyWindow → OnDestroy

没有按钮就不响应OK和Cancel

3.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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容