相关疑难解决方法(0)

将cout重定向到Windows中的控制台

我有一个相对较旧的应用程序.通过一些小的改动,它几乎完全用Visual C++ 2008构建.我注意到的一件事是我的"调试控制台"工作不正常.基本上在过去,我AllocConsole()用来为我的调试输出创建一个控制台.然后我会用它freopen来重定向stdout到它.这与C和C++风格的IO完美配合.

现在,它似乎只适用于C风格的IO.将内容重定向cout到分配的控制台的正确方法是什么AllocConsole()

这是以前的代码:

if(AllocConsole()) {
    freopen("CONOUT$", "wt", stdout);
    SetConsoleTitle("Debug Console");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我发生的一件事是我可以创建一个自定义streambuf,其溢出方法使用C样式IO写入并std::cout用它替换默认的流缓冲区.但这似乎是一个警察.有没有正确的方法在2008年这样做?或者这可能是MS忽略的东西?

编辑2:好的,所以我已经实现了上面拼写的想法.基本上它看起来像这样:

class outbuf : public std::streambuf {
public:
    outbuf() {
        setp(0, 0);
    }

    virtual int_type overflow(int_type c = traits_type::eof()) {
        return fputc(c, stdout) == EOF ? traits_type::eof() : c;
    }
};

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
    // create the console …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

38
推荐指数
3
解决办法
4万
查看次数

标签 统计

c++ ×1

winapi ×1