MFC窗口程序显示命令行输出窗口的方法
2010-12-01 15:10
453 查看
首先,为什么要这么做,一般我们的目的是为了调试的时候方便。
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来获得输出。
下面是简单的代码:
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来获得输出。
下面是简单的代码:
//Windows2Console.h #ifndef _WINDOW2CONSOLE_H_ #define _WINDOW2CONSOLE_H_ //新建命令行输出窗口 class Windows2Console { public: //构造函数 Windows2Console(void); //析构函数 ~Windows2Console(void); private: //建立 void Setup(void); }; #endif
//Windows2Console.cpp #include "StdAfx.h" #include "windows2console.h" #include <io.h> #include <fcntl.h> #include <iostream> using namespace std; /************************************************************************************ * * 函数名称 Windows2Console * 函数介绍 构造函数,创建Console窗口 * 函数参数 void * 返回 值 无 * ***********************************************************************************/ Windows2Console::Windows2Console(void) { AllocConsole(); Setup(); } /************************************************************************************ * * 函数名称 ~Windows2Console * 函数介绍 析构函数,关闭Console窗口 * 函数参数 void * 返回 值 无 * ***********************************************************************************/ Windows2Console::~Windows2Console(void) { FreeConsole(); } /************************************************************************************ * * 函数名称 Setup * 函数介绍 创建函数,设置Console窗口可读写 * 函数参数 void * 返回 值 void * ***********************************************************************************/ void Windows2Console::Setup(void) { *stdin = *( _fdopen(_open_osfhandle((intptr_t)::GetStdHandle(STD_INPUT_HANDLE), _O_TEXT), "r")); *stdout = *( _fdopen(_open_osfhandle((intptr_t)::GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT), "wt")); ios_base::sync_with_stdio(); }
相关文章推荐
- MFC窗口程序显示命令行输出窗口的方法
- MFC窗口程序显示命令行输出窗口的方法
- MFC窗口程序显示命令行输出窗口的方法
- MFC窗口程序显示命令行输出窗口的方法
- <VS>MFC程序显示命令行窗口
- GUI程序如何使用控制台输出调试信息[zz][MFC调用win32窗口显示调试信息,使用AllocConsole 函数 ]
- 不显示命令行窗口和在程序中加载lib文件的方法
- MFC及控制台窗口程序获取命令行传过来的参数的方法
- mfc如何显示dos窗口,调试程序
- MFC窗口程序启动时最小化到托盘、不在任务栏中显示、显示时在右小角
- Visual Studio控制台程序输出窗口一闪而过的解决方法
- Visual Studio控制台程序输出窗口一闪而过的解决方法
- MFC子线程更改图像数据后更新主窗口图像显示方法
- 【转载】SDL2.0在mfc窗口中显示yuv的一种方法 分类: ffmpeg-SDL-VLC-Live555 2013-08-28 11:33 1124人阅读 评论(0) 收藏
- Visual Studio控制台程序输出窗口一闪而过的解决方法
- opencv2 在mfc窗口中显示关于cv::Mat 的解决方法
- Visual Studio控制台程序输出窗口一闪而过的解决方法
- mfc(win32)gui程序中添加console信息输出输出窗口
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- 添加/删除程序空白窗口及控制面板窗口显示异常问题的解决方法