创建非模态对话框释放内存的问题

本文讨论了非模态对话框的内存管理和销毁问题。针对只打开一次和可重复打开的对话框,提供了不同的处理策略。对于前者,需要在OnCancel中调用DestroyWindow并在PostNcDestroy中delete指针;对于后者,应保存对话框指针并在父窗口OnDestroy时遍历销毁。同时指出,KillTimer不应在析构函数中调用,因为窗口句柄已失效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    若给非模态对话框设置了父窗口,则应该在父窗口中销毁对话框窗口,释放对话框的C++指针。

 

m_pDlg:应用程序中对话框的指针,初始值为NULL;

     CDlg是对话框类名称;

     m_listWnd:应用程序中存储CDlg的指针

 

    当应用程序打开非模态对话框时,因要保存其类指针,所以必须在对话框被销毁时,释放自己的资源。这里分两种情况:

1.对于只打开一次的非模态对话框。

   需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的。
   还有一个必须重载的函数就是PostNcDestroy,这也是一个虚函数,通常的非模态对话框是用类的指针,通过new创建的,这就需要在PostNcDestroy函数中delete掉这个指针。

   这样,其父窗口就不需要代码来管理该非模态对话框内存的释放。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值