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

问题描述 投票:1回答:1

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

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...
c++ console-application background-color
1个回答
1
投票

您询问:

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

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

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

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

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

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.