C++ 用C+;将彩色文本打印到控制台+;

C++ 用C+;将彩色文本打印到控制台+;,c++,programming-languages,text,console,terminal,C++,Programming Languages,Text,Console,Terminal,我想写一个控制台类,可以输出彩色文本到控制台 所以我可以做一些类似的事情(基本上是printf的包装): 如何将不同颜色的文本打印到Windows控制台?我搜索了“c++控制台编写彩色文本”,大约在4或5时找到了。由于该站点有一个复制和粘贴部分,我想我会将其发布在这里(另一个关于link rot的问题也提示了这一点): #包括 #包括 #包括 使用名称空间std; 枚举颜色{DBLUE=1,绿色、灰色、深灰色、DPURP、棕色、LGREY、DGREY、蓝色、浅灰色、青色, 红色,紫色,黄色,白色

我想写一个控制台类,可以输出彩色文本到控制台

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

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

我搜索了“c++控制台编写彩色文本”,大约在4或5时找到了。由于该站点有一个复制和粘贴部分,我想我会将其发布在这里(另一个关于link rot的问题也提示了这一点):

#包括
#包括
#包括
使用名称空间std;
枚举颜色{DBLUE=1,绿色、灰色、深灰色、DPURP、棕色、LGREY、DGREY、蓝色、浅灰色、青色,
红色,紫色,黄色,白色,B_B};
/*不管怎么说,这是前16种颜色。你自己测试其他几百个。
15之后,它们都是不同颜色文本/背景的组合*/
布尔辞职;
空列(无符号短颜色)
{
句柄hcon=GetStdHandle(标准输出句柄);
SetConsoleTextAttribute(hcon,颜色);
}
istream&operator>>(istream&in,彩色&c)
{
内色调;
cin>>染色;
如果(色调==-1)退出=true;
c=(颜色)色调;
}
int main()
{
做{
第(7)列;//每轮的默认颜色。
cout>y;//注意上面为颜色类型定义了>>。
col(y);//将输出颜色设置为y。
如果(!quit)无法签出。我将制作一个自定义操纵器,以便执行以下操作:

std::cout << "standard text" << setcolour(red) << "red text" << std::endl;
std::cout
#包括
#包括
使用名称空间std;
int main()
{
处理hOut;
hOut=GetStdHandle(标准输出句柄);
SetConsoleTextAttribute(hOut,
背景(红色);
不能使用这些函数吗

enum c_color{BLACK=30,RED=31,GREEN=32,YELLOW=33,BLUE=34,MAGENTA=35,CYAN=36,WHITE=37};
enum c_decoration{NORMAL=0,BOLD=1,FAINT=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51};
void pr(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
  cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m";
}

void prl(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
   cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"<<endl;
}
enum c_color{黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,品红色=35,青色=36,白色=37};
枚举c_装饰{NORMAL=0,BOLD=1,light=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51};
void pr(常量字符串str,c_颜色,c_装饰装饰=c_装饰::正常){

你的第一个链接即使是C#也能提供信息。搜索词是“C#console.write colored text”在这种情况下,这段代码实际上不起作用,但您刚刚替换的上一个版本确实起作用了。我会再次检查是否正确though@Brock伍尔夫:是的,对不起。我在复制句柄时遇到问题。如果您想在中间更改颜色,请确保在再次调用setcolor()之前发送
std::flush
std::cout << "standard text" << setcolour(red) << "red text" << std::endl;
#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();
}
#include <windows.h>
#include <iostream.h>
using namespace std;

int main()
{
    HANDLE hOut;

    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_RED);
    cout << "Red     " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_RED |
                            BACKGROUND_INTENSITY);
    cout << "Red     " << endl;

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_GREEN);
    cout << "Green   " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_GREEN |
                            BACKGROUND_INTENSITY);
    cout << "Green   " << endl;

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_BLUE);
    cout << "Blue    " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_BLUE |
                            BACKGROUND_INTENSITY);
    cout << "Blue    " << endl;

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_RED | 
                            BACKGROUND_GREEN);
    cout << "Yellow  " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_RED | 
                            BACKGROUND_GREEN |
                            BACKGROUND_INTENSITY);
    cout << "Yellow  " << endl;

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_GREEN | 
                            BACKGROUND_BLUE);
    cout << "Cyan    " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_GREEN | 
                            BACKGROUND_BLUE |
                            BACKGROUND_INTENSITY);
    cout << "Cyan    " << endl;

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_BLUE | 
                            BACKGROUND_RED);
    cout << "Magenta " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_BLUE | 
                            BACKGROUND_RED |
                            BACKGROUND_INTENSITY);
    cout << "Magenta " << endl;

    SetConsoleTextAttribute(hOut,
                            BACKGROUND_RED | 
                            BACKGROUND_GREEN | 
                            BACKGROUND_BLUE);
    cout << "White   " << flush;
    SetConsoleTextAttribute(hOut,
                            BACKGROUND_RED | 
                            BACKGROUND_GREEN | 
                            BACKGROUND_BLUE |
                            BACKGROUND_INTENSITY);
    cout << "White   " << endl;

    return 0;
}
enum c_color{BLACK=30,RED=31,GREEN=32,YELLOW=33,BLUE=34,MAGENTA=35,CYAN=36,WHITE=37};
enum c_decoration{NORMAL=0,BOLD=1,FAINT=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51};
void pr(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
  cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m";
}

void prl(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){
   cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"<<endl;
}