我有一个现有的简单 MFC 应用程序,用户指定输入文件、输出文件,然后是“处理”按钮。我只想添加功能,以便输入/输出文件是命令行参数。但是,如果它们存在,我不希望 GUI 出现。我只想执行“流程”。我知道在哪里可以获取命令行参数 (m_lpCmdLine),但是如何绕过 GUI 的显示?如果我进入应用程序,它会直接进入 winmain.cpp 并显示 GUI,而无需进入我的任何代码。
最佳答案
MFC 设置了一个名为 C[Your App Name]App(例如 CExampleApp)的类存储在 [Your App Name].h/.cpp(例如 Example.h/.cpp)中,在这里你将有一个名为“的函数” InitInstance”(再次由 MFC 自动生成)。如果您已经创建了一个基于 Dialog 的应用程序,那么您将在函数中看到一些如下所示的代码:
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,否则它将进入应用程序消息泵。
关于command-line - 如果存在命令行选项,如何绕过 MFC 应用程序中的 GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3062958/