在C++中将彩色文本打印到控制台

Bro*_*olf 7 c++ terminal console text programming-languages

我想编写一个可以将彩色文本输出到控制台的Console类.

所以我可以做类似的事情(基本上是printf的包装器):

Console::Print( "This is a non-coloured message\n" );
Console::Warning( "This is a YELLOW warning message\n" );
Console::Error( "This is a RED error message\n" );
Run Code Online (Sandbox Code Playgroud)

如何将不同颜色的文本打印到Windows控制台?

Sku*_*del 10

查看本指南.我会做一个自定义操纵器,所以我可以这样做:

std::cout << "standard text" << setcolour(red) << "red text" << std::endl;
Run Code Online (Sandbox Code Playgroud)

是关于如何实现自己的操纵器的小指南.

一个快速的代码示例:

#include <iostream>
#include <windows.h>
#include <iomanip>

using namespace std;

enum colour { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE };

struct setcolour
{
   colour _c;
   HANDLE _console_handle;


       setcolour(colour c, HANDLE console_handle)
           : _c(c), _console_handle(0)
       { 
           _console_handle = console_handle;
       }
};

// We could use a template here, making it more generic. Wide streams won't
// work with this version.
basic_ostream<char> &operator<<(basic_ostream<char> &s, const setcolour &ref)
{
    SetConsoleTextAttribute(ref._console_handle, ref._c);
    return s;
}

int main(int argc, char *argv[])
{
    HANDLE chandle = GetStdHandle(STD_OUTPUT_HANDLE);
    cout << "standard text" << setcolour(RED, chandle) << " red text" << endl;

    cin.get();
}
Run Code Online (Sandbox Code Playgroud)