我有一个现有的简单MFC应用程序,用户需要指定输入文件、输出文件,然后点击“处理”按钮。我想要增加的功能是让输入/输出文件成为命令行参数。但是,如果这些参数存在,我不希望GUI界面显示出来,只想要执行“处理”。我知道可以获取命令行参数(m_lpCmdLine),但是如何跳过GUI的显示呢?如果我进入应用程序,它会直接进入winmain.cpp并显示GUI,而不会进入我的任何代码。
MFC创建了一个名为C[你的应用程序名称]App(例如CExampleApp)的类,存储在[你的应用程序名称].h/.cpp(例如Example.h/.cpp)中。在这里,你将拥有一个名为“InitInstance”的函数(同样是由MFC自动生成的)。如果你创建了一个基于对话框的应用程序,那么在该函数中会有一些代码看起来像这样:
CExampleDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
具体来说,“dlg.DoModal()”将调用您的对话框窗口。如果您避免这样做,GUI将永远不会启动。
如果您正在使用MDI应用程序,则会有类似以下的一些代码:
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
这将创建并显示您的主窗口。如果避免此操作,则不会创建窗口。但是,您必须从InitInstance函数返回FALSE,否则它将进入应用程序消息泵。
LoadFrame()
函数,但即使我没有调用ShowWindow()
函数,窗口仍然会闪烁。我发现,在LoadFrame()
函数之前调用CWinAppEx::m_bLoadWindowPlacement = false;
,就可以避免出现窗口和闪烁了。 - mateuscb