zoukankan      html  css  js  c++  java
  • MFC中重定向stdout,可以使用cout了!

     原始出处在:http://www.halcyon.com/~ast/dload/guicon.htm.

    我修改了一下,合并成一个头文件guicon.h,在vs2005中调试通过,修改了部分代码以适应64bit的编译,用法就不多说了,只要在使用前调用RedirectIOToConsole(),一次就可以了。 很简单的。

    #ifndef __GUICON_H__

    #define __GUICON_H__

    #ifdef _DEBUG

    #include 
    <windows.h>

    #include 
    <stdio.h>

    #include 
    <fcntl.h>

    #include 
    <io.h>

    #include 
    <iostream>

    #include 
    <fstream>

    #ifndef _USE_OLD_IOSTREAMS

    using namespace std;

    #endif

    // maximum mumber of lines the output console should have

    static const WORD MAX_CONSOLE_LINES = 500;

    void RedirectIOToConsole();

    void RedirectIOToConsole()

    {

        
    int hConHandle;

        HANDLE
     lStdHandle;

        CONSOLE_SCREEN_BUFFER_INFO coninfo;

        FILE 
    *fp;

        
    // allocate a console for this app

        AllocConsole();

        
    // set the screen buffer to be big enough to let us scroll text

        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), 

            
    &coninfo);

        coninfo.dwSize.Y 
    = MAX_CONSOLE_LINES;

        SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), 

            coninfo.dwSize);

        
    // redirect unbuffered STDOUT to the console

        lStdHandle 
    = GetStdHandle(STD_OUTPUT_HANDLE);

        hConHandle 
    = _open_osfhandle((INT_PTR)lStdHandle, _O_TEXT);

        fp 
    = _fdopen( hConHandle, "w" );

        
    *stdout = *fp;

        setvbuf( stdout, NULL, _IONBF, 
    0 );

        
    // redirect unbuffered STDIN to the console

        lStdHandle 
    = GetStdHandle(STD_INPUT_HANDLE);

        hConHandle 
    = _open_osfhandle((INT_PTR)lStdHandle, _O_TEXT);

        fp 
    = _fdopen( hConHandle, "r" );

        
    *stdin = *fp;

        setvbuf( stdin, NULL, _IONBF, 
    0 );

        
    // redirect unbuffered STDERR to the console

        lStdHandle 
    = GetStdHandle(STD_ERROR_HANDLE);

        hConHandle 
    = _open_osfhandle((INT_PTR)lStdHandle, _O_TEXT);

        fp 
    = _fdopen( hConHandle, "w" );

        
    *stderr = *fp;

        setvbuf( stderr, NULL, _IONBF, 
    0 );


        
    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog 

        
    // point to console as well

        ios::sync_with_stdio();

    }



    //End of File
    #endif
    #endif

     
  • 相关阅读:
    POJ Area of Simple Polygons 扫描线
    POJ2828 Buy Tickets 线段树
    cf578c Weakness and Poorness 三分
    poj3737 UmBasketella 真正的三分
    POJ1061 青蛙的约会 exgcd
    POJ3090 Visible Lattice Points 欧拉函数
    P2860 [USACO06JAN]冗余路径Redundant Paths
    [JSOI2008]球形空间产生器
    [APIO2010]特别行动队
    [ZJOI2007]仓库建设
  • 原文地址:https://www.cnblogs.com/swordzj/p/2034742.html
Copyright © 2011-2022 走看看