作了一个基于对话框的应用程序,如何在对话框中调出一个新的无模式对话框用了下面的方法,可是对话框出来就消失了,只是一闪,有人知道怎么做吗?? m_dlg->Create(IDD_MSG_DLG);
   m_dlg->ShowWindow(SW_SHOW);

解决方案 »

  1.   

    m_dlg.估计是局部变量. 函数结束后,对话框析构了. 要么new 出来,要么保持为类成员或者全局变量. 反正在需要显示对话框的这段时间要保证对话框不析构
      

  2.   

    m_dlg = new CMSGDLG;
    m_dlg->Create(IDD_MSG_DLG, this);
    m_dlg->ShowWindow(SW_SHOW);
      

  3.   

    CRecvmsg* m_dlg = new CRecvmsg;
    m_dlg->Create(IDD_MSG_DLG,this);
    m_dlg->ShowWindow(SW_SHOW);具体是这样的 CRecvmsg 是对话框的类,但是这样一些就会抛出来一个运行时的异常
      

  4.   

    m_dlg->Create(IDD_MSG_DLG,this)
    成功了吗?
      

  5.   

    CRecvmsg* m_dlg;声明为类成员,不要用局部变量
      

  6.   

    在对话框内, OnPostNcDestory(){ delete this; }
      

  7.   

    暂时还不能用,请问是不是CRecvmsg* m_dlg; 声明为类成员初始化的时候可以在函数体里面做吗
    m_dlg = new CRecvmsg;
    m_dlg->Create(IDD_MSG_DLG,this);
    m_dlg->ShowWindow(SW_SHOW);是这样吗??
      

  8.   

    看你的起名不像是局部变量啊。。
    在头文件声明对象,在cpp里调用你上面的方法,应该没问题的,个人不推荐用指针。// 在头文件里声明
    #include "Recvmsg.h"
    CRecvmsg m_dlg;
    // 在cpp里实现
    m_dlg.Create(IDD_MSG_DLG, this);
    m_dlg.ShowWindow(SW_SHOW);
      

  9.   

    楼上的方法我试验过了
    可能是我这个程序涉及到多线程和socket的东西不能像一般程序那样实现
      

  10.   

    可能是这样的,LZ, 你在其它线程创建了对话框? 如果是这样,那么就有问题. MFC的窗口类是不能跨线程的. 你应该在主线程里创建好这样的窗口,并在需要的时候显示. 最好通过消息机制让和线程来做GUI操作.
      

  11.   

    对话框类初始化的时候窗口还没有创建,窗口句柄无效。此时调用窗口相关的函数会出错,比如Create子窗口。应该在响应WM_INITDIALOG消息中创建子窗口。
      

  12.   

    CEyeGuarderDlg *dlg=new CEyeGuarderDlg;
    m_pMainWnd=dlg;    //注意这里
    BOOL ret = dlg->Create(IDD_EYEGUARDER_DIALOG,NULL);
    if(!ret)   //Create failed.
       AfxMessageBox("Error creating Dialog");