1 打印信息

1.1 缘由

在日常的VC开发中,有充分的理由需要一个输出打印信息的地方,微软为我们提供了TRACE,或者ATLTRACE,但是这必须是在DEBUG,并且需要IDE或者Windbg工具的配合使用.但实际上有一种更简单的方式,不仅仅在DEBUG,而且在RELEASE,都可以不依赖任何工具的为我们打印信息或者提供控制.

1.2 使用Console Window

可以让窗体应用中拥有ConsoleWindow吗?

答案是肯定的:

在需要显示或者启动ConsoleWindow的地方调用如下代码

AllocConsole();
freopen("CONOUT$","w",stdout); //关于CONOUT$参见GetStdHandle在MSDN中的参数注解,这里是将stdout重定向到命令行输出

在程序退出之前应当释放我们分配的控制台资源.代码如下:

FreeConsole();

在调用了分配控制台之后,在释放控制台之前,可以直接调用printf函数来打印到控制台,就像在控制台程序下打印消息一样简单方便.

另外,不一定需要在程序启动,或程序退出时候来进行分配和释放,你也可用通过比如按键响应事件来控制分配和释放.

1.3 使用Console Window做更多的事情

有时候我们可能还需要更多的特性,比如像在纯的Console程序中一样,可以根据输入来做一些不同的事情,我们这里是通过ReadConsole来实现从命令行中读取输入信息。

 

1.3.1 源码说明

1._Console.h文件,位于Fade\Console目录下

该文件用于封装打开,关闭Console窗口,以及提供读取命令行输入内容的接口和控制接口

2.Console.h文件,位于Fade\Console目录下

该文件用于封装_Console.h,其中封装了功能函数和导出接口

3.ConsoleCommand.h文件,位于Fade\Console目录下

该文件用于封装Console.h,并且提供命令控制方式

4.ConsolePrint.h文件,位于Fade\Console目录下

该文件属于用于定制文件,提供了打印过滤的功能,如果你需要其他方面的定制,可以参照该文件来编写代码.

 上述代码中引用了SingleTon.h,位于Fade\SingleTon目录下.这是单实例类的一种实现方法,后面会讲到.

1.3.2 使用方法

参见如下代码

static DWORD WINAPI Proc(LPVOID){
	CConsolePrint* pCP=CConsolePrint::GetInstance();
	while(1){
		pCP->PrintfFilter("cmd1","Print1\r\n");
		Sleep(500);
		pCP->PrintfFilter("cmd2","Print2\r\n");
		Sleep(500);
		pCP->PrintfFilter("cmd3","Print3\r\n");
		Sleep(500);
	}
	return 0;
}

BOOL CAMFC_DlgApp::InitInstance()
{
	CConsolePrint::InitInstance()->ShowConsole();
	::CreateThread(NULL,0,Proc,NULL,0,NULL);

该段代码需要包含ConsolePrint.h文件

上述代码启动了一个线程,并且在线程中使用CConsolePrintPrintfFilter进行打印.

1.3.4 使用结果

1.启动程序

 

2.输入命令 PrintFilter cmd2

 

3.按下回车

 

上述步骤就是基本的操作方式,通过使用PrintFilter命令来控制打印输出.

命令格式为PrintFilter+空格+参数.

如果参数为空,则不打印任何内容,如果参数为”*”则打印所有内容,如果参数为其他字符串,则将该字符串同PrintfFilter中传入的字符串进行匹配.

程序还提供了CTRL+C的暂停和继续功能.

1.4 小结

看完了上述内容,是不是觉得很炫酷?不仅很炫酷,而且还为程序的调试,错误的发现提供了相当的便利.而且还能提供除了打印之外的更多控制,当然这个就需要读者自己去写代码了,不过也很简单,你看明白了ConsolePrint.h,然后根据这个来写你自己的命令行控制代码是非常容易的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值