总结OnOK、OnCancel、OnDestroy函数之间的区别
第⼀,OnOk()和OnCancel()是CDialog基类的成员函数,即ID为ID_OK和ID_CANCEL的按钮的通知消息的响应函数,⽽OnClo()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数图书角布置图片
第⼆,OnClo()和OnDestroy()
在对话框程序中,根据《深⼊浅出MFC》所讲,程序退出执⾏时执⾏的操作顺序为(从点X按钮开始)
(1)⽤户点击X关闭按钮,发送了WM_CLOSE消息———–>响应OnClo()
(2)在WM_CLOSE消息的处理函数中,调⽤DestroyWindow()———>销毁与指定CWnd对象关联的窗⼝,但没有销毁CWnd对象
拼音音调口诀念法(3)在DestroyWindow()中发送了WM_DESTROY消息———–>窗⼝销毁后响应OnDestroy();
(4)在WM_DESTROY消息中调⽤PostQuitMessage(),发送WM_QUITT消息,结束消息循环
可以看到,程序的退出过程,是先响应OnClo(),然后响应OnDestroy()。OnDestroy中调⽤PostQuitMessage()发送WM_QUIT消息结束消息循环。男孩的英语
甲醛对孕妇的影响
如果没有重定义OnClo函数的话
含两个数字的成语在对话框程序中,
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(),OnClo(),OnDestroy()
CDialog::OnOk⾸先调⽤UpdateData(TRUE)将数据传给对话框成员变量,然后调⽤CDialog::EndDialog()关闭对话框;
CDialog::OnCancel只调⽤CDialog::EndDialog关闭对话框;
OnClo()是WM_CLOSE的响应函数。在⼀定程度上可以说CDialog::EndDialog()和OnClo()完成类似的⼯作,但处理的机制不⼀样,前者是CDialog的对象机制,后者是WM的消息映射机制。
表扬老师的句子
qualCDialog::EndDialog()————>OnDestroy()
OnClo()————>OnDestroy()
所以我们在按下cancel按钮的时候,程序不会执⾏OnClo(),⽽是调⽤了直接调⽤了CDialog::EndDialog(),然后调⽤了OnDestroy()