tab页中有多个对话框,由于程序在一次运行中需要多次重新初始化这些对话框,因此按这种方法创建的对话框:
    //创建对话框对象
    if(m_pTypeDlg){
m_pTypeDlg->DestroyWindow();
delete m_pTypeDlg;
    }
    m_pTypeDlg=new CAllTypesDlg(this);
    m_pTypeDlg->Create(IDD_DIALOG_ALLTYPES,&m_DDXTab); 
    m_pTypeDlg->SetWindowPos (NULL,m_TabRectMain.left+10,m_TabRectMain.top+20,\
m_TabRectMain.Width()-20,m_TabRectMain.Height()-10,SWP_HIDEWINDOW);可是执行了一次后,连view中的变量好像都被释放掉了;这种情况的对话框应该怎么释放呢?

解决方案 »

  1.   

    这么销毁应该没问题吧,不过你重新创建出来的对话框是不是应该重新加入tab?
    view中的变量被释放掉不明白什么意思
      

  2.   

    对话框的释放确实是
    if(m_pTypeDlg){
      m_pTypeDlg- >DestroyWindow();
      delete m_pTypeDlg;
      m_pTypeDlg = NULL;
    } 至于view被销毁了,应该捕捉view销毁的消息,在消息里先释放对话框
      

  3.   

    tab页的销毁和对话框什么关系,是不是那个对话框LZ当作一个属性页来使用?那么和1楼说的一样,这个对话框再次被创建的时候,怎么没有插入Tab中啊?至于View被销毁,那个bug不在这几句代码中了
      

  4.   

    用全局的CDialog指针,一次创建,TAB页显示时设置就行了
      

  5.   

    楼主的代码,好像不是要把dialog作为一个tab页的,他要把dialog作为tab里面的一部分的,所以他在create的时候把tab作为parent传进去了。
      

  6.   

    如果你觉得有必要每次都重新的create的话,那么在这之前的DestroyWindow也确实是必须的。
      

  7.   

    是这样的,我作了一个tab初始化的函数,其中包含了tab中要用到的对话框操作,如:
    void Inittab()
    {
        if(m_pTypeDlg){ 
           m_pTypeDlg- >DestroyWindow(); 
        delete m_pTypeDlg; 
        } 
        m_pTypeDlg=new CAllTypesDlg(this); 
        m_pTypeDlg- >Create(IDD_DIALOG_ALLTYPES,&m_DDXTab);  
        m_pTypeDlg- >SetWindowPos (NULL,m_TabRectMain.left+10,m_TabRectMain.top+20,\ 
        m_TabRectMain.Width()-20,m_TabRectMain.Height()-10,SWP_HIDEWINDOW); 
        
        if(m_Dlg1){ 
           m_Dlg1- >DestroyWindow(); 
           delete m_Dlg1; 
        } 
        m_Dlg1=new CAllTypesDlg(this); 
        m_Dlg1- >Create(IDD_DIALOG_ALLTYPES,&m_DDXTab);  
        m_Dlg1- >SetWindowPos (NULL,m_TabRectMain.left+10,m_TabRectMain.top+20,\ 
        m_TabRectMain.Width()-20,m_TabRectMain.Height()-10,SWP_HIDEWINDOW); 
    ......
    }
      第一次初始化都正常,第二次调用这个函数的时候,view和Doc中的变量好像都被释放了...我没有调用view的destroy啊
      

  8.   

    是啊是啊,我的tab里要用到多个dialog,又要在程序一次运行时,多次复位tab中的dialog装态,所以我就想每次需要初始化的时候先destroy掉这些对话框,然后重新create。可是搞不明白怎么view和doc全都被destroy了的感觉....
      

  9.   

    知道咧,惭愧的说,这个tab初始化函数被我在tab的某个对话框里给调用了,自己把自己都给释放了,不报错才怪...
      

  10.   

    能顺便问一下吗,view的Oninitialupdate()中要完全退出应该怎么做啊,直接调destroywindow会报错
      

  11.   

    在这里面destroy估计会错的,必须要退出后,设个timer试试吧
      

  12.   

    学习
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html