以前用非模态对话框的时候都是在程序中通过一个按钮或菜单调用,现在我想让一个通过appwizard建立的对话框程序在启动时就用非模态的方法显示出来,请问以下这些代码应该加在哪里?
dlg=new CMyDlg;                //CMydlg *dlg=NULL的声明位于全局区
dlg-> Create(IDD_PS_DIALOG);
dlg-> ShowWindow(SW_SHOW);我已经把原来appwizard默认在app类中的initinstance里生成的dlg.domodal()等等有关模态对话框的代码都删除了,并且把上面的三行代码试着放入app类中的initinstance,CMydlg类中的OnInitialDialog也试过了,可是都不行,运行结果是那个对话框闪了一下就消失了,请问这是什么原因?该怎么解决?

解决方案 »

  1.   

    dlg=new CMyDlg;                //CMydlg *dlg=NULL的声明位于全局区
    dlg-> Create(IDD_PS_DIALOG);//加上下面这两句试一下
    DWORD style = dlg->GetStyle();
    dlg->ModifyStyle(style,WS_CHILD|WS_VISIBLE,1);
    dlg->SetParent(pParent);dlg-> ShowWindow(SW_SHOW);
      

  2.   

    模态的就应该使用DoModal方法,而非模态的就应该使用Create方法,注意非模态的生命周期是随着类的析构而消失.
      

  3.   

    还是不行啊,加了之后就debug assertion failed 了。问题尚待解决 
      

  4.   

    把InitInstance的return FALSE修改为return TRUE
      

  5.   

    mynamelj(风之羽翼)说的很对,
    如果你用非模态对话框的话,一经调用后马上就return,也就是程序就结束了.除非在此你先调用一个隐藏起来的DoModal