MFC应用程序在启动时关闭

时间:2014-06-20 09:39:21

标签: c++ visual-c++ mfc

尝试运行一个简单的MFC应用程序,但因为程序终止而关闭,假设我需要在一个单独的线程中运行对话框,但无法解决问题。

到目前为止,这是代码:

CWinApp theApp;

using namespace std;

int main(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(NULL);

    theApp.InitApplication();
    theApp.InitInstance();
    theApp.Run();

    AfxWinTerm();

    if (hModule != NULL)
    {
        // initialize MFC and print and error on failure
        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
        {
            // TODO: change error code to suit your needs
            _tprintf(_T("Fatal Error: MFC initialization failed\n"));
            nRetCode = 1;

        }
        else
        {
            MyDialog *mdlg = new MyDialog();
            mdlg->Create( IDD_MDLG, theApp.m_pMainWnd);
            mdlg->ShowWindow( true );

        }
    }
    else
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
        nRetCode = 1;
    }

    return nRetCode;
}

我必须做一些简单的事情来阻止程序终止,只是不确定如何?

2 个答案:

答案 0 :(得分:2)

而不是打电话:

mdlg->ShowWindow( true );

你应该这样做:

mdlg->DoModal();

另外,我认为你不需要Create。如果你想继续使用无模式对话框,那么你应该在从main返回之前创建消息循环 - 比如这里http://en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows

答案 1 :(得分:1)

据我所知,您创建了一个Win32控制台应用程序并尝试添加GUI?如果你真的需要控制台,你应该这样做。如果没有,那么更好地创建一个新项目,选择MFC应用程序模板并选择基于对话框的应用程序。该向导将创建您所需的一切。

BTW,你的

MyDialog *mdlg = new MyDialog();
mdlg->Create( IDD_MDLG, theApp.m_pMainWnd);
mdlg->ShowWindow( true );

应该更好:

MyDialog mdlg;
mdlg.DoModal();

在你的情况下不需要new,所以只需在堆栈上分配对象。并DoModal做你想做的事。

在支持MFC的Win32控制台应用程序中,我能够显示一个对话框。但是在我的向导生成的代码中,这些行不存在,所以也许你应该删除它们:

theApp.InitApplication();
theApp.InitInstance();
theApp.Run();

AfxWinTerm();