尝试运行一个简单的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;
}
我必须做一些简单的事情来阻止程序终止,只是不确定如何?
答案 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();