[英]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.