如果存在命令行选项,我该如何绕过MFC应用程序中的GUI界面?

5
我有一个现有的简单MFC应用程序,用户需要指定输入文件、输出文件,然后点击“处理”按钮。我想要增加的功能是让输入/输出文件成为命令行参数。但是,如果这些参数存在,我不希望GUI界面显示出来,只想要执行“处理”。我知道可以获取命令行参数(m_lpCmdLine),但是如何跳过GUI的显示呢?如果我进入应用程序,它会直接进入winmain.cpp并显示GUI,而不会进入我的任何代码。
1个回答

3

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接