更改C ++控制台应用程序的背景颜色

时间:2019-04-08 10:21:22

标签: c++ console-application background-color

如果我想使用绿色,红色,蓝色以外的颜色,该如何更改控制台应用程序的前景色?以下是我的部分代码:

case GreenFlag:
    indicator = GreenFlag;
    SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_GREEN);
    cout << "Green message" << endl;
    break;
case OrangeFlag:
    indicator = OrangeFlag;
    // SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_ORANGE);
    cout << "Orange message" << endl;
    break;
case RedFlag:
    indicator = RedFlag;
    SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_RED);
    cout << "Red message" << endl;
    break;
case WhiteFlag:
    indicator = WhiteFlag;
    // SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), BACKGROUND_WHITE);
    cout << "White message" << endl;
    break;
etc...

1 个答案:

答案 0 :(得分:1)

您问过:

  

如何使用绿色,红色,蓝色以外的颜色?

您可以组合标记以创建新的颜色:

  

应用程序可以将前台和后台常量组合为   实现不同的颜色。例如,以下组合   会在蓝色背景上显示明亮的青色文字。

     

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY |   Background_BLUE

     

如果未指定背景常数,则背景为黑色,并且   如果未指定前景常量,则文本为黑色。对于   例如,以下组合在白色上产生黑色文本   背景。

     

BACKGROUND_BLUE | Background_GREEN | Background_RED

除此之外,您可以在每个字符上分别设置颜色和/或修改屏幕缓冲区属性:

  

每个屏幕缓冲区字符单元格都存储   绘制前景(文本)和背景时使用的颜色   细胞。应用程序可以为每个字符单元设置颜色数据   分别将数据存储在   每个单元格的CHAR_INFO结构。每个文本的当前文本属性   屏幕缓冲区用于随后写入或回显的字符   通过高级功能。

     

应用程序可以使用GetConsoleScreenBufferInfo确定   屏幕缓冲区的当前文本属性以及   SetConsoleTextAttribute函数设置字符属性。   更改屏幕缓冲区的属性不会影响屏幕缓冲区的显示   以前写的字符。这些文本属性不影响   低级控制台I / O功能(例如   WriteConsoleOutput或WriteConsoleOutputCharacter函数),其中   要么为每个要写入的单元格明确指定属性   或保留属性不变。

有关文档和示例,请参见: https://docs.microsoft.com/en-us/windows/console/using-the-high-level-input-and-output-functions