Color console output with C++ in Windows

前端 未结 4 1157
面向向阳花
面向向阳花 2020-12-14 11:52

Is there a way to output colored text to the console? I am using Visual Studio 2010, and only need the code to work in Windows.

I have been unsuccessful in finding a

相关标签:
4条回答
  • 2020-12-14 12:12

    You can use the system("") command, which is used like that:

    cout<<"lol";
    system("color 1") // the colours are from 1 to 15. 
    cout<<"Coloured text! yay";
    
    0 讨论(0)
  • 2020-12-14 12:22

    Here is our in house solution:

    inline void setcolor(int textcol, int backcol)
    {
        if ((textcol % 16) == (backcol % 16))textcol++;
        textcol %= 16; backcol %= 16;
        unsigned short wAttributes = ((unsigned)backcol << 4) | (unsigned)textcol;
        HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        SetConsoleTextAttribute(hStdOut, wAttributes);
    }
    

    and here are examples of colors to choose from:

    #define LOG_COLOR_WHITE 7
    #define COLOR_GREEN 10
    #define COLOR_YELLOW 14 
    #define COLOR_MAGENTA 13
    
    0 讨论(0)
  • 2020-12-14 12:23

    I took this code from here:

    // color your text in Windows console mode
    // colors are 0=black 1=blue 2=green and so on to 15=white
    // colorattribute = foreground + background * 16
    // to get red text on yellow use 4 + 14*16 = 228
    // light red on yellow would be 12 + 14*16 = 236
    // a Dev-C++ tested console application by vegaseat 07nov2004
    
    #include <iostream>
    #include <windows.h> // WinApi header
    
    using namespace std; // std::cout, std::cin
    
    int main()
    {
    HANDLE hConsole;
    int k;
    
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    
    // you can loop k higher to see more color choices
    for(k = 1; k < 255; k++)
    {
    // pick the colorattribute k you want
    SetConsoleTextAttribute(hConsole, k);
    cout << k << " I want to be nice today!" << endl;
    }
    
    cin.get(); // wait
    return 0;
    }
    
    0 讨论(0)
  • 2020-12-14 12:26

    Coloring C++ output in Windows is done through SetConsoleTextAttribute, where the HANDLE of the console passed in along with attributes. However, calling SetConsoleTextAttribute is cumbersome. Fortunately, there are lots of small libraries on the internet and github that can assist, you should just pick one with an API you like. If you want to change colors with operator<<, I recommend this header-only library https://github.com/ikalnitsky/termcolor. The api looks like this:

    using namespace termcolor;
    std::cout << grey    << "grey message"    << reset << std::endl;
    std::cout << red     << "red message"     << reset << std::endl;
    

    If having to reset the color turns you off, try my library. It's header-only too, Windows only, and it lets you color printf statements easily: https://github.com/jrebacz/colorwin. The api looks like this:

    using namepsace wincolor;
    std::cout << color(gray) << "grey message\n";
    std::cout << color(red) << "red message\n";
    
    std::cout << "normal color\n";
    {
        withcolor scoped(red);
        std::cout << "|red\n";
        std::cout << "|red again\n";
    }
    std::cout << "normal color\n";
    withcolor(cyan).printf("A cyan printf of %d\n", 1234);
    
    0 讨论(0)
提交回复
热议问题