好久不用MFC了,Dialog based工程,把DoModal生成的模式对话框换成用Create生成的无模式对话框,程序运行一闪而过就退出了,貌似没有进入消息循环?

解决方案 »

  1.   

    无模式对话框作主窗口要自己构造消息循环的
    MFC貌似可以用RunModalLoop
      

  2.   

    CXXDlg dlg;
      m_pMainWnd = &dlg;
    dlg.Create(IDD_AA_DIALOG);
    dlg.ShowWindow(SW_SHOW);
    dlg.RunModalLoop();
      

  3.   

    CXXDlg dlg;
      m_pMainWnd = &dlg;
    dlg.Create(IDD_XX_DIALOG);
    dlg.ShowWindow(SW_SHOW);
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0))
    {
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);
    }
    return FALSE;
    CXXDlg类重载virtual void OnCancel()虚函数
    void CXXDlg::OnCancel()
    {
    PostQuitMessage(0);
    }
      

  4.   

    可能有IDOK按钮的话,可能OnOK虚函数中也要调用PostQuitMessage(0);
      

  5.   

    不用,CWinApp的父类CWinThread内部已经实现了消息循环,你只要
    先给你的App类添加一个CXXDlg* dlg;的成员变量dlg = new CXXDlg();
    if(dlg !=NULL)
    {
    m_pMainWnd = dlg;
    dlg->Create(IDD_XX_DIALOG);
    dlg->ShowWindow(SW_SHOW);return TRUE;
    }
    else
    {
    return FALSE;
    }
    不过注意要给对话框类添加WM_CLOSE的消息映射,并在里面PostQuitMessage触发App的退出。
    然后在App的ExitInstance里delete dlg;
      

  6.   

    如果你的对话框里有确定之类的按钮的话,要在那个确定里面DestoryWindow销毁dlg自己,并PostQuitMessage。
    如果不PostQuitMessage,App是不会退出的。