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

首先,为什么要这么做,一般我们的目的是为了调试的时候方便。

 

WINDOWS为你提供了一系列的API来完成这个功能,例如:ReadConsole,WriteConsole等,具体参见MSDN。   
    
  1。首先调用AllocConsole函数来为你进程创建一个Console,该API是将当前进程Attache到一个新创建的Console上。你还可以通过调用SetConsoleTitle(tstrName);来设置Console的Title.   
    
  2。使用WriteConsoleOutput来将信息输出到Console上;在输出之前,先要得到Console的HANDLE,这通过GetStdHandle(STD_OUTPUT_HANDLE)来得到,然后将信息组织成Console的格式,然后输出。   
    
  3。关闭CONSOLE。当不需要这个CONSOLE的时候,调用FreeConsole来将当前进程从Console中Detach中。   
    
  4。通过创建一个进程来为监视你的CONSOLE输入和输出;你可以创建一个线程然后来,在线程中取得标准输入和输出CONSOLE的HANDLE,然后循环监视其事件,再对不同的事件进行处理。

上面说的方案的代码例子:   
  http://blog.csdn.net/windcsn/archive/2005/11/27/537737.aspx   
    
  第二种方案:   
  在   Project   |   Setting...中,选项   Post-builder   step   里新建command,   输入:     
  editbin   /SUBSYSTEM:CONSOLE   $(OUTDIR)/filename.exe     
  (其中   filename   为可执行文件名)     
  则可以使用   printf   或者   std::cout   在控制台中输出了。例如你的可执行文件名为   HelloWorld.exe,则你新建的   command   就为:

editbin     /SUBSYSTEM:CONSOLE     $(OUTDIR)/HelloWorld.exe

第三种方案,就用TRACE,然后编译debug的工程,直接运行你的可执行文件,可以用Dbgview来获得输出。

 

下面是简单的代码:

[cpp]  view plain copy
  1. //Windows2Console.h  
  2. #ifndef _WINDOW2CONSOLE_H_  
  3. #define _WINDOW2CONSOLE_H_  
  4.   
  5. //新建命令行输出窗口  
  6. class Windows2Console  
  7. {  
  8. public:  
  9.     //构造函数  
  10.     Windows2Console(void);  
  11.   
  12.     //析构函数  
  13.     ~Windows2Console(void);  
  14.   
  15. private:  
  16.     //建立  
  17.     void Setup(void);  
  18. };  
  19.   
  20. #endif  

 

[cpp]  view plain copy
  1. //Windows2Console.cpp  
  2. #include "StdAfx.h"  
  3. #include "windows2console.h"  
  4.   
  5. #include <io.h>  
  6. #include <fcntl.h>  
  7. #include <iostream>  
  8. using namespace std;  
  9.   
  10. /************************************************************************************ 
  11. * 
  12. *   函数名称        Windows2Console 
  13. *   函数介绍        构造函数,创建Console窗口 
  14. *   函数参数        void 
  15. *   返回  值       无 
  16. * 
  17. ***********************************************************************************/  
  18. Windows2Console::Windows2Console(void)  
  19. {  
  20.      AllocConsole();  
  21.      Setup();  
  22. }  
  23.   
  24. /************************************************************************************ 
  25. * 
  26. *   函数名称        ~Windows2Console 
  27. *   函数介绍        析构函数,关闭Console窗口 
  28. *   函数参数        void 
  29. *   返回  值       无 
  30. * 
  31. ***********************************************************************************/  
  32. Windows2Console::~Windows2Console(void)  
  33. {  
  34.     FreeConsole();  
  35. }  
  36.   
  37. /************************************************************************************ 
  38. * 
  39. *   函数名称        Setup 
  40. *   函数介绍        创建函数,设置Console窗口可读写 
  41. *   函数参数        void 
  42. *   返回  值       void 
  43. * 
  44. ***********************************************************************************/  
  45. void Windows2Console::Setup(void)  
  46. {  
  47.     *stdin  = *( _fdopen(_open_osfhandle((intptr_t)::GetStdHandle(STD_INPUT_HANDLE), _O_TEXT), "r"));  
  48.     *stdout = *( _fdopen(_open_osfhandle((intptr_t)::GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT), "wt"));  
  49.     ios_base::sync_with_stdio();  
  50. }  


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值