对话框关闭时,框架回调用OnNcDestroy,OnNcDestroy会调用虚函数PostNcDestroy,在你的类中重载PostNcDestroy,在其中加入delete this就可以自动清除了.
如果不重载PostNcDestroy,也可以delete显式删除,但因为是非模态对话框,不容易知道其窗口是否已destory,所以最好还是用自动清除的方法
如果不重载PostNcDestroy,也可以delete显式删除,但因为是非模态对话框,不容易知道其窗口是否已destory,所以最好还是用自动清除的方法
解决方案 »
- 为什么我的程序调用对话框显示很慢
- 发送消息到窗口报错 error C2664: “SendMessageW”: 不能将参数 1 从“CWnd *”转换为“HWND”
- 大家帮我看看我用winsocket模拟http,get,收不到数据
- C++调用Python遇到的到的问题(TypeError:No registered converter was able to extract...)
- idc_edit 设置值的问题
- pe加载器
- vector删除时崩溃 请问是不是vector内部分配内存的错误 应该怎样解决?
- 关于栈和堆的问题
- MFC的DLL工程里DDsurface的LOCK方法使用问题
- Jedi(杰迪)还在吗?
- 怎么在一个基于对话框的程序中加入状态条?
- 在ListCtrl的LVN_KEYDOWN拦截不到回车
如:
class CModelessDlg:public CDailog
{
public:
CModelessDlg(UINT uIDD,CDialog ** ppThis,CWnd * pParent=NULL);
//....
protected:
CDialog ** m_ppThis;
};CModelessDlg::PostNcDestroy()
{
if(m_ppThis)
*m_ppThis=NULL;
delete this;
CDialog::PostNcDestroy();
}
这样你在外面建立一个非模式对话框时就可以从这个类继承实现。
如:class CYourDlg:public CModelessDlg
{
CYourDlg(CDialog ** ppThis,CWnd* pParent=NULL);
};CYourDlg::CYourDlg(CDialog ** ppThis,CWnd* pParent):
CModelessDlg(CYourDlg::IDD,ppThis,pParent)
{//...
}CYourDlg * m_pDlg=new CYourDlg(&m_pDlg);
m_pDlg->Create();
// ....
if(m_pDlg)
m_pDlg->DestroyWindow();如果你在一个程序里生成了一个非模式对话框,而没有显示地删除,在程序退出时系统会发送退出消息给这个对话框。一般情况下,你可以用DestroyWindow代替delete删除该对话框,这样做似乎更加符合Windows的消息机制