您的位置:首页 > 其它

为窗体程序添加控制台及重新绑定输入输出流

2013-11-10 13:17 225 查看
在窗体未激活时,似乎标准输出的调用会无效。待究

#include <io.h>
#include <fcntl.h>
#include <stdio.h>

// AllocConsole();

void printConsole(std::string s)
{
HANDLE g_Con = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwWritten=0;
WriteConsoleA(g_Con,s.c_str(),s.length(),&dwWritten,NULL);
}
void RelocationConsole(void)
{
HANDLE  hStd;
int     fd;
FILE    *file;

// 重定向标准输入流句柄到新的控制台窗口

hStd = GetStdHandle(STD_INPUT_HANDLE);
fd = _open_osfhandle(reinterpret_cast<intptr_t>(hStd), _O_TEXT); // 文本模式
file = _fdopen(fd, "r");
setvbuf(file, NULL, _IONBF, 0); // 无缓冲
*stdin = *file;

// 重定向标准输出流句柄到新的控制台窗口

hStd = GetStdHandle(STD_OUTPUT_HANDLE);
//COORD size;
//size.X = ConsoleWidth;
//size.Y = ConsoleHeight;
//SetConsoleScreenBufferSize(hStd, size);
fd = _open_osfhandle(reinterpret_cast<intptr_t>(hStd), _O_TEXT); //文本模式
file = _fdopen(fd, "w");
setvbuf(file, NULL, _IONBF, 0); // 无缓冲
*stdout = *file;

// 重定向标准错误流句柄到新的控制台窗口

hStd = GetStdHandle(STD_ERROR_HANDLE);
fd = _open_osfhandle(reinterpret_cast<intptr_t>(hStd), _O_TEXT); // 文本模式
file = _fdopen(fd, "w");
setvbuf(file, NULL, _IONBF, 0); // 无缓冲
*stderr = *file;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: