MFC 模式对话框、非模式对话框关闭过程 | 您所在的位置:网站首页 › mfc关闭当前对话框 › MFC 模式对话框、非模式对话框关闭过程 |
转载:https://www.cnblogs.com/lidabo/archive/2012/07/04/2576590.html 工作中没有小事:点石成金,滴水成河,只有认真对待自己所做的一切事情,才能克服万难,取得成功。 因为最近一直援助一个项目,没怎么接触新的东西,但在改问题的过程中对于一些基础的东西认识更深了,在此记录一下,这是借鉴别人的成果,但实际项目中体会到的用法。 简单梳理一下窗口关闭流程: (1)用户点击"X"关闭窗口,触发WM_CLOSE消息响应OnClose()函数(2)在WM_CLOSE消息的处理函数中,调用DestroyWindow()销毁与指定CWnd窗口对象关联的窗口,但未销毁CWnd对象 (3)在DestroyWindow()中发送了WM_DESTROY消息窗口销毁后响应OnDestroy() (4)在WM_DESTROY消息中调用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() cDialog::onok(),enddialog(),destroywindow区别 模式和无模式对话的中止是不一样的: 模式对话通过调用CDialog : : EndDialog 来中止; 非模式对话则是调用CWnd: : DestroyWindow来中止的, 函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数 |
CopyRight 2018-2019 实验室设备网 版权所有 |