Win32窗口程序自定义控制台输出
2021-08-30
125
0
习惯了使用printf之类的控制台输出,而在以winmain入口的用户界面程序中要调试输出很不方便。
当然,微软也提供了 OutputDebugString的函数让大家使用,但是,使用OutputDebugString的成本也很高。
首先各个函数只支持字符串输出,你想输出个变量也得自己格式化,再调用。
其次,就算输出了,你也得使用DebugView之类的函数来显示。但使用DebugView来看时,又经常混有别的进程的输出。
最后,你想走到那里调试,都得随身携带DebugView吗?
真是够折腾人的!!!
其实,控制台也是一个窗口,我们可以通过AllocConsole
来创建一个即可,然后再打开标准的输入输出流文件句柄即可。
代码如下:
void CTest::OnBnClickedButtonConsole()
{
static int i = 0;
static FILE* fp = NULL;
i++;
if (i % 2)
{
::AllocConsole();
freopen_s(&fp, "CONOUT$", "w+t", stdout);
setlocale(LC_ALL, "chs");//#include <locale.h>
//freopen_s(&fp, "CONIN$", "r+t", stdout);
//freopen_s(&fp, "CONOUT$", "w+t", stdout);
printf("hello\n");
}
else
{
fclose(fp);
::FreeConsole();
}
}