我建立一个对话框工程,要实现点OK时对话框消毁并再显示出另一个对话框。  
我的做法:  
    建立一个TEST的对话框工程;  
    插入一个对话框资源,并建立相应的类MYTEST;
    在主程序类CTESTApp的InitInstance()中添加代码如下;
BOOL CTESTApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif CTESTDlg dlg;//程序自己生成的对话框类,也就是第一个对话框
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
     MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
     TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
}
else if (nResponse == IDCANCEL)
{

} return FALSE;
}
编译执行通过,可是我点第一个对话框的OK后屏幕只是闪了一下就完成退出了,并没有显示出第二个对话框啊?请问这到底是怎么回事啊?而且我把上面显示第二个对话框的代码改成AfxMessageBox("hello"),也是显示不出来啊?

解决方案 »

  1.   

    在类MYTEST中添加关于按钮控件的消息事件啥
      

  2.   

    可能ok后主窗口已关闭了。

    MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
    TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
    写在CTESTDlg里的ok按钮消息里试试。
      

  3.   

    改成这样看看:
    if(nResponse == IDCANCEL)
    {
    return FALSE;
    } MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
    TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
      

  4.   

    第一个作为主窗口,m_pMainWnd OK后系统就退出了,你的对话框其时显示了,但这时已经退出了,建议你修改m_pMainWnd 为其他对话框
      

  5.   

    薄荷说的对。你的m_pMainWnd 一ok就退出了。它的子窗口当然也销毁了。建议把创建窗口并显示的语句调到别的地方,比如自己加一个按钮,在这个按钮的相应函数里写就可以了。
      

  6.   

    你的m_pMainWnd 一ok就退出了!!!!!!!!!!
      

  7.   

    这样改吧,把
    m_pMainWnd = &dlg;
    去掉,也无伤大雅,你的程序就可以运行了;
    不过这个指针你的工程就不能用了;
      

  8.   

    在主窗框的OnOk函数中先将自己因此,然后DoModal第二个对话框,然后再调用CDialog::OnOK函数将主窗口销毁,也是一种方法。
      

  9.   

    先隐藏掉自己然后在显示第二个对话框,其实这个问题的根本在于m_pMainWnd这个变量,
    当m_pMainWnd析构时调用PostQuitMessage(0)这样当前线程结束,当然你的第二个对话框就不能显示了
      

  10.   

    if (nResponse == IDOK)
    {
                  // 扔掉 WM_QUIT 消息
                  MSG msg;
                  while((::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));      MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
         TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
    }