windows std cout设置输出颜色

Table of Contents

    包含头文件ConsoleColor.h

    std::cout << red << "this text is read" << std::endl;
    std::cout << green << "this text is green" << std::endl;
    
    
    // ConsoleColor.h
    
    #pragma once
    #include <iostream>
    #include <windows.h>
    
    inline std::ostream& blue(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE
                  |FOREGROUND_GREEN|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& red(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
                    FOREGROUND_RED|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& green(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
                  FOREGROUND_GREEN|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& yellow(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
             FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& white(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
           FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
        return s;
    }
    
    struct color {
        color(WORD attribute):m_color(attribute){};
        WORD m_color;
    };
    
    template <class _Elem, class _Traits>
    std::basic_ostream<_Elem,_Traits>& 
          operator<<(std::basic_ostream<_Elem,_Traits>& i, color& c)
    {
        HANDLE hStdout=GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout,c.m_color);
        return i;
    }
    
    // Copyleft Vincent Godin