MFC对话框关闭时跳过OnDestroy()(

来源:互联网 发布:php pdf html代码 编辑:程序博客网 时间:2024/05/16 11:25
通常关闭对话框的过程是:点击标题栏中的“X”按钮后调用OnClose();在CDialog::OnClose()中会自动调用OnCancel();在CDialog::OnCancel()中会自动调用EndDialog();在正式销毁对话框对象之前,会自动调用OnDestroy()。上面的方法都可以重载。当点“取消”按钮时,就是从OnCancel()开始执行。

    如果我们在调用OnDestroy()之前就强行销毁对话框对象,就会跳过OnDestroy()的调用。

    但是我们会在什么情况下强行销毁对话框对象呢?下面是一个例子!

    创建一个单文档程序,在程序中新建一个对话框类COperatorDlg。在CMainFrame类头文件中定义一个变量:COperatorDlg *m_operatorDlg。CMainFrame源文件中通过m_operatorDlg = new COperatorDlg来创建对象指针,通过m_operatorDlg.Create(IDD_ID)来创建非模态对话框,可以通过这个对话框来进行交互性的文档操作。

    关闭对话框时为了使对话框能够被重复创建以及防止内存泄漏,会在COperatorDlg类OnClose()函数中向MainFrame框架窗口发送一条自定义消息,在CMainFrame的消息处理函数中delete m_operatorDlg;同时m_operatorDlg = NULL。

    这样一来就在调用OnDestroy()之前销毁了对话框对象,关闭了对话框,跳过了OnDestory()的执行。因此在这种情况下如果要释放在COperatorDlg类中申请的内存空间应该放在OnClose()中或者析构函数中!

0 0
原创粉丝点击