Изменить цвет фона консольного приложения C ++ - PullRequest
1 голос
/ 08 апреля 2019

Как мне изменить цвет переднего плана консольного приложения, если я хочу использовать цвета, отличные от зеленого, красного, синего?Ниже часть моего кода:

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 Ответ

1 голос
/ 08 апреля 2019

Вы спросили:

как использовать цвета, отличные от зеленого, красного, синего?

Вы можете комбинировать флаги для создания новыхцвета:

Приложение может комбинировать константы переднего и заднего плана для получения разных цветов.Например, следующая комбинация приводит к яркому голубому тексту на синем фоне.

FOREGROUND_BLUE |FOREGROUND_GREEN |FOREGROUND_INTENSITY |BACKGROUND_BLUE

Если фоновая константа не указана, фон черный, а если не указана постоянная переднего плана, текст черный.Например, следующая комбинация создает черный текст на белом фоне.

BACKGROUND_BLUE |BACKGROUND_GREEN |BACKGROUND_RED

Кроме того, вы можете устанавливать цвета отдельно для каждого символа и / или изменять атрибуты экранного буфера:

В каждой ячейке символа экранного буфера хранятся цветовые атрибуты дляцвета, используемые при рисовании переднего плана (текста) и фона этой ячейки.Приложение может установить данные цвета для каждой ячейки символов индивидуально, сохраняя данные в элементе Attributes структуры CHAR_INFO для каждой ячейки.Текущие текстовые атрибуты каждого экранного буфера используются для символов, которые впоследствии записываются или отражаются высокоуровневыми функциями.

Приложение может использовать GetConsoleScreenBufferInfo для определения текущих текстовых атрибутов экранного буфера и функцию SetConsoleTextAttribute для установкиатрибуты персонажа.Изменение атрибутов экранного буфера не влияет на отображение ранее написанных символов.Эти текстовые атрибуты не влияют на символы, записанные низкоуровневыми консольными функциями ввода-вывода (такими как функция WriteConsoleOutput или WriteConsoleOutputCharacter), которые либо явно указывают атрибуты для каждой записываемой ячейки, либо оставляют атрибуты без изменений.

Документацию и пример см .: https://docs.microsoft.com/en-us/windows/console/using-the-high-level-input-and-output-functions

...