非模态对话框的销毁

本文探讨了非模态对话框的销毁过程,包括重写OnClose、OnDestroy和PostNcDestroy函数。当点击关闭按钮时,执行OnClose函数,随后销毁窗口。在子对话框关闭后,需要将创建它的指针设为NULL,以避免内存泄漏。通过分析MFC的消息处理顺序,理解窗口创建、显示和关闭的机制。
摘要由CSDN通过智能技术生成

前面写过一篇关于模态和非模态对话框的文章,关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值 。文章末尾我遗留了一个问题,即当销毁非模态对话框后,需要置创建该非模态对话框的指针为NULL,但是具体是怎么操作呢?具体在哪里设置呢?

非模态对话框的销毁动作执行的是哪一个函数呢?即当点击窗口最右上角的关闭按钮后,执行了哪一个函数?

我的程序中是利用父窗口类的成员变量来创建的非模态子对话框,那么当关闭子对话框后需要使指针为NULL,当然其实大可不必这样,只需要在父类的析构函数中delete就行。但我的设计是点击创建的按钮可以显示,也可以隐藏,即如果没有创建子对话框,那么就创建子对话框,如果已经显示,再次点击就隐藏,再次点击就显示。里面涉及到if对指针PnewDlg的判断。那么就需要在子对话框关闭后使PnewDlg=NULL。

由于现在是回忆啊,所以写到有些问题可能记不清当时是为什么会那样了。比如当时我在网上找到的资料,关闭子对话框的时候需要重写PostNcDestroy函数和OnCancel函数。当时我记得我故意写了一个afxmessagebox测试了一下,结果关闭子对话框的时候并没有弹出提示信息,而是当我关闭父窗口后才弹出这个afxmessagebox对话框。至于具体原因,我现在也无法考证当时的情况。

那么如何重写这两个函数呢?

void CFTPCilentDlg::PostNcDestroy()  //。在屏幕上一个窗口被删除后,框架会调用CWnd::PostNcDestroy,这是一个虚拟函数,程序可以在该函数中完成删除窗口对象的工作
{
    // TODO: 在此添加专用代码和/或调用基类
//  isnull=TRUE;
//  AfxMessageBox("ddddd");
    CDialogEx::PostNcDestroy();  //先调用父类的
    delete this;     //添加这一句就可以
}<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值