在窗体未激活时,似乎标准输出的调用会无效。待究。
#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; }