command-line - 如果存在命令行选项,如何绕过 MFC 应用程序中的 GUI?

标签 command-line mfc arguments

我有一个现有的简单 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/

相关文章:

linux - 为什么在 Linux 上的 SendEmail 中句首的句号会被忽略

date - 尝试使用 date 命令创建存档时 Tar 命令抛出错误

c++ - 多次调用后 LoadBitmap 失败

c++ - MFC 应用程序在 CRecentFileList::Add 命令行 FileOpen 处断言失败

scala - 前向引用扩展了值(value)问题的定义

javascript - 将参数传递给函数

Haskell(haskell)单词补全

node.js - 将工具安全迁移到 Homebrew

c++ - 如何将CCmdTarget派生类嵌入到MFC消息链中?

VBScript - 不知道为什么我的参数没有像变量一样使用