在主窗体中使用:CMyDlg *dlg;
dlg = new CMYDlg;
dlg.Create(IDC_MYDLG);
dlg.ShowWindow(SW_SHOW);问题是在显示出子对话框dlg以后,如果在该子对话框dlg中关闭掉该子窗口,
那么为这个子窗口分配的资源dlg该如何释放掉呢?

解决方案 »

  1.   

    在父类的构造函数中new
    在父类的析构函数中delete
      

  2.   

    不是啊,我是在父类的一个函数中临时使用的Dialog局部变量,该变量不是全局变量。
      

  3.   

    CMyDlg dlg;
    ====
    这样可能不行
    因为函数结束后
    对话框的资源被系统释放了
    对话框就没了
      

  4.   

    不知道MFC是不是已经做了自动释放,如果不是的话,可以这样:让CMyDlg响应NCDESTROY消息,这个消息是最后一个发送给对话框的消息了,响应这个消息的时候用delete this;讲自己删除就可以了。注意一定要是NCDESTROY消息,其他消息因为不是最后一个消息!
      

  5.   

    1.把CMyDlg *dlg;定义成全局变量2.在主窗口析构函数中
    if( dlg!= NULL)
    {
        delete dlg;
        dlg = NULL;
    }
    3.如楼上所说,让CMyDlg响应NCDESTROY消息,
    在NCDESTROY消息响应代码中,delete this,其他代码注释掉
      

  6.   

    lixiaosan(小三) 
    在NCDESTROY消息响应代码中,delete this,其他代码注释掉
    =============================
    其它代码,例如它自身的代码函数调用,也要注释掉吗?
      

  7.   

    if modeless dialog ,you should call this:
    void CSaveDlg::PostNcDestroy() 
    {
    // TODO: Add your specialized code here and/or call the base class
    delete this;
    CDialog::PostNcDestroy();
    }
      

  8.   

    只注释以下
    // CDialog::PostNcDestroy();
      

  9.   

    gracezhu(eutom) 
    ==============
    对,我就是那么调用的,没有注释掉CDialog::PostNcDestroy();,可不可以呢?
      

  10.   

    捕捉WM_DESTROY消息
    void CDeskEasyDlg::OnDestroy() 
    {
    CDialog::OnDestroy();
    if(m_dlgAddressBook)
    {
      dlg->DestroyWindow();
    }
    }