MFC - 将app扩展为从命令行运行

时间:2010-11-15 16:50:58

标签: c++ command-line mfc

我有一个现有的MFC应用程序,我正在尝试扩展它以接受命令行参数并运行无人参与。

在 InitInstance()完成并且现有GUI已经完全加载后,我需要启动一些事件。我看过winmain.cpp,但是我不清楚如何运行我的事件,因为它似乎启动了一个线程并从调试器中“消失”(即接下来执行的是什么?必须是MFC循环,对吧?是否有可能进入那里?)我是新手,我完全有可能错过了更高层次的洞察力,这不是那么容易用Google搜索。感谢指针。

感谢。

3 个答案:

答案 0 :(得分:1)

我会像往常一样解析InitInstance中的命令行,但不是立即处理你找到的所有命令,而是为你关心的那些命令添加一些特殊处理(例如)将消息发回给你自己的消息队列,所以当你准备开始处理消息时,它们将显示为第一个要做的事情。

要做到这一点,我可能CComandLineInfo派生一个类,并覆盖ParseParam来处理你关心的命令(并让它发送任何其他参数它无法识别回CComandLineInfo::ParseParam正常处理)。然后,在InitInstance中,替换这段代码:

// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

使用自定义命令行解析器:

MyCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
然后

ParseCommandLine将为命令行上的每个参数调用ParseParam,为您提供第一次决定它意味着什么以及如何处理它的机会。您可能希望查找CComandLineInfo已经理解的“标准”命令,除非确实需要更改它们,否则请将它们单独保留。

答案 1 :(得分:1)

拦截命令行参数的最简单方法是引用全局变量__targv(定义为LPCTSTR* __targv或类似的东西)和__argc(定义为int)。

例如:

for(int i = 0; i < __argc; ++i) {
    DoSomethingWithArg(__targv[i]);
}

基本上就像任何其他控制台应用程序一样。

答案 2 :(得分:0)

你可以重载PreTranslateMessage而不是跳过那里的消息