例如,
BOOL CTrayDialogApp::InitInstance()
{
AfxEnableControlContainer();#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif m_pDlg=new CTrayDialogDlg;
m_pDlg->Create(IDD_TRAYDIALOG_DIALOG);
m_pMainWnd=m_pDlg; return FALSE;
}程序总是立刻就退出了。
能否保留住呢?

解决方案 »

  1.   

    应该不是吧.后面还要RUN呢.
    return TRUE就可以了.我猜想InitInstance()是负责初始化的.只有初始化成功才会CWinApp::Run(). 否则立刻就CWinApp::ExitInstance()了.
      

  2.   

    可是 TRACE后发现Run没有执行
      

  3.   

    你比较一下DIALOG程序和SDI/MDI程序的INITINSTANCE就知道了.你的问题有些不配你的星哦.
      

  4.   

    你initinstance返回TRUE,然后继续跟,就会看到下面这些代码:
    if (!pThread->InitInstance())
    {
    if (pThread->m_pMainWnd != NULL)
    {
    TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");
    pThread->m_pMainWnd->DestroyWindow();
    }
    nReturnCode = pThread->ExitInstance();
    goto InitFailure;
    }
    nReturnCode = pThread->Run();  //这不就是RUN?
      

  5.   

    的确是这样的,CWinApp::InitInstance()在返回TRUE时,才继续运行程序,如果返回FALSE,则立即调用CWinApp::ExitInstance()结束程序。
    对于通过AppWizard创建的基于对话框的程序,由于主窗口是模式对话框,所以InitInstance里返回的是FALSE,如果你要改成,主窗口以非模式对话框创建,则InitInstance必须返回TRUE。
      

  6.   

    return FALSE中止运行.
    return TRUE进入消息循环.