窗口程序中的控制台
很多朋友写窗口程序的时候,调试的时候在很多输出的地方使用 MessageBox 进行调试,更令人烦心的就是我们的好多参数必须使用 sprintf 或 wsprintf 转换为字符串传给我们的 MessageBox 参数 . 很是麻烦,很多朋友这时候就开始欢迎我们控制台使用 printf 时的快乐时光了,无须任何转换,直接使用格式字符串就可以输出,很是方便。其实在窗口程序中我们也可以使用控制台 .
BOOL WINAPI AllocConsole(void);
这个函数的作用就是给我们的程序分配一个控制台 . 那么对应的函数 ;
BOOL WINAPI FreeConsole(void);
用来释放一个控制台 .
我们在我们的程序中加入 AllocConsole(); 就可以为程序分配一个控制台了,但是我们仍是无法使用 printf 往控制台上进行输出 . 因为窗口程序默认的输出方向不是控制台,我们需进行输出重定向 . 改变默认的输出方向到控制台 . 所以我们就找到了函数 :
FILE *freopen( const char * path , const char * mode , FILE * stream ); FILE *_wfreopen( const wchar_t * path , const wchar_t * mode , FILE * stream ); |
这个函数就是专门用于输入输出重定向的,我们看下他的参数 :
path
你重新定义后的路径,这里可以是一个带路径文件名 .
mode
这是访问该文件的模式,如 : 只读,只写,读写等 .
stream
一个文件流指针 .
而我们这里重定向的方向不是一个文件,而是控制台,那么我们第一个参数该传什么呢。网上的答案是这样的 :
freopen("CONOUT$","w+t",stdout);
好了,天上这句代码我们就可以使用 printf 往控制台上进行输出了,但有些时候我们可能会与之交互,还需要从控制台输入,那么不要紧,我们在进行一个输入重定向就可以了 :
freopen("CONIN$","r+t",stdin);
这样就 OK 了,简单吧,要想在窗口程序中拥有一个可以输入和输出的控制台就这么简单 :
1. AllocConsole();
2. freopen("CONOUT$","w+t",stdout);
3. freopen("CONIN$","r+t",stdin);
这下在调试我们的窗口程序时我们不用再为我们的 MessageBox 和 sprintf 而烦恼了 . 呵呵 .