目标
让应用程序处理这里所见的命令行标志。
>XXX.exe /c /d
策略
一个MFC应用程序可以用CCommandLineInfo类的成员函数ParseParam()处理一些标准标
志。要添加我们自己的标志,而仍然能够支持另外一些标志,我们将从CCommandLineInfo派
生类,然后重载ParseParam()。
步骤
1.创建一个新的CCommandLineInfo类
1)用ClassWizard创建一个派生于CCommandLineInfo的新类。在新类中,为应用程序要
处理的每个新的标志添加一个Boolean或String成员变量。
classCWzdCommandLineInfo:publicCCommandLineInfo
{
public:
BOOLm_bAFlag;
BOOLm_bCFlag;
BOOLm_bDAFlag;
CStringm_sArg;
2)添加一个ParseParam()函数,以重载基类的ParseParam()函数。
//Operations
public:
voidParseParam(constTCHAR*pszParam,BOOLbFlag,BOOLbLast);
};
3)如下实现ParseParam():
voidCWzdCommandLineInfo::ParseParam(constTCHAR*pszParam,
BOOLbFlag,BOOLbLast)
{
CStringsArg(pszParam);
if(bFlag)
{
m_bAFlag=!sArg.CompareNoCase("a");
m_bCFlag=!sArg.CompareNoCase("c");
m_bDAFlag=!sArg.CompareNoCase("da");
}
//m_strFileNamegetsthefirstnonflagname
elseif(m_strFileName.IsEmpty())
{
m_sArg=sArg;
}
88第二部分用户界面实例
下载
CCommandLineInfo::ParseParam(pszParam,bFlag,bLast);
}
注意到变量pszParam包括命令行中的下一项。如果pszParam的后面是一个—(连字符)或
/(正斜杠)字符,则bFlag变量为TRUE,这些字符将被删除;如果pszParam是一行中最后一个
变量,则bLast为TRUE。确信最后调用基类的ParseParam(),否则标准标志不被处理。
4)有关命令行消息类的详细清单,参见本节的“清单—命令行消息类”。
2.把新的命令行消息类插到应用程序类中
1)在应用程序类中找到ParseCommandLine(),并用该新类替换CCommandLineInfo类。
//Parsecommandlineforstandardshellcommands,DDE,fileopen
CWzdCommandLineInfocmdInfo;
ParseCommandLine(cmdInfo);
2)现在,命令行选项不能作为cmdInfo变量的成员变量。
if(cmdInfo.m_bAFlag)
{
:::
}
3)要使这些选项在整个应用程序中可得,则把cmdInfo嵌入应用程序中,并访问它的成员
变量。
(CXXXApp*)AfxGetApp()->m_cmdInfo.m_bAFlag;
注意:CXXXApp类是你自己创建的应用程序类
说明
■标准MFC标志如下,真正处理这些标准命令行发生在ProcessShellCommand(cmdInfo)
中,它正好在应用程序类中ParseCommandLine()之后。
nothing使应用程序试图打开一个新文档
filename使应用程序试图以文档方式打开文件名
/pfilename使应用程序打开并打印给定的文件名到默认的打印机
/ptfilename与上面相同,但输入到指定的打印机
printerdriverport
/dde使应用程序开始运行,并等待DDE命令
/AutomationCOM标志
/Embedding
/Unregister
/Unregserver
■处理非标准标志(如名字)会有点复杂,我们认为出现的第一个非标准标志是文档文件名。
然而,一旦一个文件名被发现,可以根据目的攫取任何非标准标志,这就是说,除非
遇到/pt标志,在这种情况下,下面三个非标准标志变量用来初始化打印。为了简化起
见,也可通过不把/pt标志传递给基类中的ParseParam()来禁用/pt标志。
■当然,如果不需继续支持前面所示的标准MFC标志,则可以更加自由地行动。只要不
用调用基类的ParseParam(),可以使用任何标志或非标准标志选项。但是,不要因为能
用非标准标志,而轻易放弃这些标准标志提供的功能。

MFC使用CCommandLineInfo处理命令行相关推荐

  1. mfc对话框操作及命令行窗口隐藏

    1.对话框在任务栏不显示图标.不是隐藏. this->ModifyStyleEx(0, WS_EX_APPWINDOW); 2.显示对话框但是 是透明的. 函数实现的. 参数1:窗口句柄 参数2 ...

  2. MFC窗口程序显示命令行输出窗口的方法

    来源:http://blog.csdn.net/k_shmily/article/details/52596927 WINDOWS为你提供了一系列的API来完成这个功能,例如:ReadConsole, ...

  3. MFC命令行及CCommandLineInfo类

    获取命令行的方法: 1.GetCommandLine() 获取输入的所有信息,包括程序所在路径及参数 2.AfxGetApp()->m_lpCmdLine 只包含参数 一般情况下,获取到命令行后 ...

  4. C语言 英汉互译电子词典 命令行,MFC,QT 3种版本

    需要1个字典文件. 命令行版 MFC版 QT版 1,命令行版 -- [1] #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #incl ...

  5. 【网络通信】简易MFC程序的创建与命令行工具cl.exe、linker.exe的使用

    简易MFC程序的创建与命令行工具cl.exe.linker.exe的使用 实验目标 实验流程 一.MFC程序 1.创建MFC项目 2.资源与代码 3.演示效果 二.编译连接windows API程序 ...

  6. 关于MFC对话框程序如何接收命令行传递过来的参数问题

    解决方法一: 使用 AfxGetApp()->m_lpCmdLine 1 CString cmd = AfxGetApp()->m_lpCmdLine; 这样获取的参数不带路径名,直接就是 ...

  7. VSMFC程序显示命令行窗口

    编写MFC程序时,想打印出调试信息,使用cout后,发现程序并没有像想象中那样自动弹出命令行窗口,要输出的信息也没地方去查看.百度后知道要手动调出命令行窗口,才可以看到输出的信息. 百度上介绍了两种方 ...

  8. c语言程序的命令行输入,C程序获取命令行参数

    命令行参数 命令行界面中,可执行文件可以在键入命令的同一行中获取参数用于具体的执行命令.无论是Python.Java还是C等等,这些语言都能够获取命令行参数(Command-line argument ...

  9. 在cmd命令行下编译运行C/C++源文件

    一直用java来写程序,java配置好jre路径之后,在cmd下编译运行,很方便. 刚好要给一个舍友改下C程序,想到可不可以像java一样在环境变量里配置好C的编译路径呢? 于是上网搜了一下,得到如下 ...

最新文章

  1. python下载安装教程图解-一招解决:各种版本的Python下载安装教程
  2. php+icu+库是什么意思,如何从PHP Intl(ICU库)中的货币代码获取货币符号
  3. 基于Java语言构建区块链(六)—— 交易(Merkle Tree)
  4. Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
  5. Python mat与array的区别
  6. SonarQube6.2源码解析(二)
  7. 7-3 棋盘覆盖 (10 分)(思路加详解)Come baby
  8. HDU 1950 Bridging signals
  9. 【CodeForces - 616C】The Labyrinth(bfs,并查集,STLset)
  10. Android mmap 文件映射到内存介绍
  11. 欧拉和格拉斯曼解释平行宇宙
  12. python3.5.2环境下安装对应版本的opencv2(2019.1.25测试成功)
  13. ssl介绍以及双向认证和单向认证原理
  14. Java或Web中解决所有路径问题
  15. USB转双串口产品设计-RS485串口
  16. 远程计算机怎么桌面显示不全,桌面显示不全怎么设置
  17. 计算机会计学试题,会计电算化考试试题 (2010)
  18. [经典之作]vml经典之作
  19. 此共享需要过时的smb1协议
  20. Python程序使用os.system()方法调用exe程序导致主程序进程无响应

热门文章

  1. cocos creator基础-创建WX开放域遇到的问题
  2. HDU1425 A Chess Game
  3. 第十二章 类和动态内存分配
  4. 【bzoj3442】学习小组 费用流
  5. linux下Intellij Idea 14的安装
  6. 设计模式-单件模式(Singleton pattern)
  7. 整理blog,回味过去的点滴
  8. JBoss 4.x 5.x 6.xJBossMQ JMS 反序列化漏洞
  9. 计算机pc软盘不能数字,老人把遗嘱存5寸软盘难坏家人 老电脑终未读出
  10. C# 系统应用之ListView控件 (二).加载选中节点文件夹下文件信息