分别定义了二个对话框类.
主程序中:
CDlg1 dlg1;
m_pMainWnd = &dlg1;
INT_PTR nResponse1 = dlg.DoModal(); CDlg2 dlg2;
m_pMainWnd = &dlg2;
INT_PTR nResponse2 = dlg.DoModal();
第2个对话框没有显示出来.
而如果把带红色的去掉,就可以了.这是为什么?

解决方案 »

  1.   

    说错了,开始没看清,是因为m_pMainWnd的问题
    m_pMainWnd = &dlg1; 这一句使用时表示dlg1结束主线程便结束,所以第二个dlg不可能显示了
    m_pMainWnd由MFC自动管理的
      

  2.   


    但我单步调试的时候,第一个dlg出来我点ok以后,程序并没有跳到结束,而继续执行后面第二个dlg的语句,但dlg不出来.
      

  3.   

    Use this data member to store a pointer to your thread’s main window object. The Microsoft Foundation Class Library will automatically terminate your thread when the window referred to by m_pMainWnd is closed. If this thread is the primary thread for an application, the application will also be terminated. If this data member is NULL, the main window for the application’s CWinApp object will be used to determine when to terminate the thread. 
      

  4.   

    你CDlg2和CDlg1里面的控件有区别吗?如果CDlg2里面有CRichEdit控件,那直接DoModal是无法显示的。
      

  5.   

    我那二个对话框都是右键添加class得出来的,是最基本的,我没改动过.
    而主程序也是新建对话框项目出来的,只是加了调用第2个对话框的一点代码.to rookieme :
    谢谢你的回复,那你可以帮我解答一下单步运行的问题吗?
      

  6.   

    情况应该是这样的:
    1.首先,你的程序不是基于对话框的,m_pMainWnd为你主窗口类数据成员;
    2.代码这样写,改变了m_pMainWnd 指针位置,进入模态对话框线程,关闭对话框,系统回到原窗口界面,但是,由于m_pMainWnd 值不能恢复,m_pMainWnd为null,这时由CWinApp对象决定程序是否中断;
    3.所以,程序继续,进入下一个对话框dlg2,但是m_pMainWnd所在窗口类数据已因为指针位置被切换而无法识别,由其确定的窗口无法显示出来(模态对话框是作为其子窗口出现的,因此也无法显示出来了).
      

  7.   

    删去m_pMainWnd = &dlg1.
    参考我的"MultiDialog.zip"
      

  8.   

    m_pMainWnd用于存贮指向线程的主窗口对象的指针。
    当主窗口结束时,线程已无法对窗口输出,所以单步虽可执行但不能输出,同理改成其它窗口输出函数同样不能输出,如AfxMessageBox同样不能输出,但所有非窗口操作语句可正常运行