在主窗体中使用:CMyDlg *dlg;
dlg = new CMYDlg;
dlg.Create(IDC_MYDLG);
dlg.ShowWindow(SW_SHOW);问题是在显示出子对话框dlg以后,如果在该子对话框dlg中关闭掉该子窗口,
那么为这个子窗口分配的资源dlg该如何释放掉呢?
dlg = new CMYDlg;
dlg.Create(IDC_MYDLG);
dlg.ShowWindow(SW_SHOW);问题是在显示出子对话框dlg以后,如果在该子对话框dlg中关闭掉该子窗口,
那么为这个子窗口分配的资源dlg该如何释放掉呢?
在父类的析构函数中delete
====
这样可能不行
因为函数结束后
对话框的资源被系统释放了
对话框就没了
if( dlg!= NULL)
{
delete dlg;
dlg = NULL;
}
3.如楼上所说,让CMyDlg响应NCDESTROY消息,
在NCDESTROY消息响应代码中,delete this,其他代码注释掉
在NCDESTROY消息响应代码中,delete this,其他代码注释掉
=============================
其它代码,例如它自身的代码函数调用,也要注释掉吗?
void CSaveDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;
CDialog::PostNcDestroy();
}
// CDialog::PostNcDestroy();
==============
对,我就是那么调用的,没有注释掉CDialog::PostNcDestroy();,可不可以呢?
void CDeskEasyDlg::OnDestroy()
{
CDialog::OnDestroy();
if(m_dlgAddressBook)
{
dlg->DestroyWindow();
}
}