繁体   English   中英

MFC应用程序在启动时关闭

[英]MFC App closes on startup

尝试运行一个简单的MFC App但由于该程序终止而关闭,假设我需要在一个单独的线程中运行该对话框,但无法解决。

到目前为止的代码如下:

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;
}

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

而不是调用:

mdlg->ShowWindow( true );

你应该做:

mdlg->DoModal();

另外,我认为您不需要Create 如果要保留无模式对话框,则应在从main返回之前创建消息循环-类似于此处http://en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows

据我所知,您创建了Win32控制台应用程序并尝试向其中添加GUI? 仅在确实需要控制台时才应该这样做。 如果不是,那么最好创建一个新项目,选择MFC Application模板,然后选择基于对话框的应用程序。 该向导将创建您需要的所有内容。

顺便说一句,你

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM