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