本帖最后由 sdchenchen2012 于 2013-02-25 10:22:15 编辑

解决方案 »

  1.   

    delete this;  不就是了吗
    你的答案并没有解决为什么 点击下一步后, 没有出现第2个对话框,关键代码:void CMyDlg1::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    //隐藏自身
    ShowWindow(SW_HIDE); // 隐藏自身
    pDlg2=new CMyDialog2();
    pDlg2->Create(IDD_MYDIALOG2,NULL);
    pDlg2->GetDlg1(this);
    pDlg2->ShowWindow(SW_SHOW);
    }我猜测,是否是因为 这个工程师给予对话框的工程,当主窗口隐藏后,就会导致第2个对话框无法出现。
      

  2.   


    貌似这样就可以看到对话框2了void CMyDlg1::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    //隐藏自身
    //ShowWindow(SW_HIDE); // 隐藏自身
    pDlg2=new CMyDialog2();
    pDlg2->Create(IDD_MYDIALOG2,NULL);
    pDlg2->GetDlg1(this);
    BOOL nRet=pDlg2->ShowWindow(SW_SHOW);
    nRet++;
    }但是效果不好,很丑陋,很希望隐藏主对话框1。但是无法隐藏
      

  3.   

    lz是想实现向导对话框功能吧,改用TAB控件吧,你这样搞太费劲太不专业了。
      

  4.   

    delte this
     不安全 为什么要这样使用?
      

  5.   

    这个是我没有注意到。看了看你的上传的代码,你这是要实现类向导的过程
    要用CPropertySheet与CPropertyPage实现的话就更好了。
      

  6.   

    你没必要每次delete掉啊,隐藏就可以了,等到窗口关闭的时候再销毁!
      

  7.   

    C++ 里,new 出来的东西,一般都需要配套 delete的,不然有内存泄漏.
      

  8.   

    怀疑 你是没有看过msdn教你如何销毁非模式对话框?
    这个对于多个对话框来说,我觉的不错, 否则太费劲了
    这个思路不错
      

  9.   

    void CMyDlg1::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    //隐藏自身
    pDlg2=new CMyDialog2();
    pDlg2->Create(IDD_MYDIALOG2,NULL);
    pDlg2->GetDlg1(this);
    pDlg2->ShowWindow(SW_SHOW);
    ShowWindow(SW_HIDE); // 隐藏自身
    }发现交换了顺序后,  就不会出现问题了,先shwo后hide
      

  10.   

    最后一个问题,我按照8楼的人提供的法子,写了代码,发现对话框2的位置不对,会跑到屏幕的最顶端(快接近最顶端)无奈之下,我在每一个showwindow前加了centerwindow这是什么原因导致的。最新的demo的源码在这里, http://pan.baidu.com/share/link?shareid=258622&uk=1913319109
    static const int nCount=2;
    static CWnd* pWndArray[nCount]={0}; //演示程序已经改成3个对话框,不再是以前的2个对话框了BOOL CMyDlg1::OnInitDialog()
    {
    CDialog::OnInitDialog();
    ........... // TODO: 在此添加额外的初始化代码
    SetPre(NULL); CMyDialog2* pDlg2=new CMyDialog2();
    pDlg2->Create(IDD_MYDIALOG2,NULL);
    pDlg2->SetPre(this);
    CMyDialog3* pDlg3=new CMyDialog3();
    pDlg3->Create(IDD_DIALOG3,NULL);
    pDlg3->SetPre(pDlg2); pDlg2->SetNext(pDlg3); pDlg3->SetNext(NULL); SetNext(pDlg2);
    pWndArray[0]=pDlg2;
    pWndArray[1]=pDlg3; return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }对话框上的下一个 按钮的代码
    void CMyDlg1::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    pNext->CenterWindow(NULL);
    pNext->ShowWindow(SW_SHOW);
    ShowWindow(SW_HIDE); // 隐藏自身
    }
      

  11.   

    必须要2个dlg吗?
    用一个,点击上一步、下一步时让dlg上显示、隐藏相应的内容