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

Change background color of C++ console app

本文关键字:背景 颜色 C++ 应用 控制台      更新时间:2023-10-16

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

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...

你问:

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

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

应用程序可以将前台常量和背景常量组合到 实现不同的颜色。例如,以下组合 在蓝色背景上产生明亮的青色文本。

FOREGROUND_BLUE |FOREGROUND_GREEN |FOREGROUND_INTENSITY | BACKGROUND_BLUE

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

BACKGROUND_BLUE |BACKGROUND_GREEN |BACKGROUND_RED

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

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

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

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