Изменение цвета в консоли (Си, Си++)

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

Как изменять цвет фона

Итак, чтобы изменить фон, будем использовать функцию system, в которую будем передавать строку следующего вида: "color <A><B>", где <A> и <B> — шестнадцатеричные цифры — первая задает цвет фона, а вторая — цвет переднего плана (цвет шрифта).

Значения цифр

  • 0 — черный
  • 1 — синий
  • 2 — зеленый
  • 3 — голубой
  • 4 — красный
  • 5 — лиловый
  • 6 — желтый
  • 7 — белый
  • 8 — серый
  • 9 — свело-синий
  • A — светло-зеленый
  • B — светло-голубой
  • С — светло-красный
  • E — светло-желтый
  • F — ярко-белый

Пример

system("color F0");  // Установка белого фона и черного текста

Изменение цвета отдельных слов

Думаю с цветом фон проблем не возникло, тогда идем дальше, будем менять цвет слов, символов, а также фон за ними. В этом случае наши действия похожи — нам придется вызывать всего одну функцию, правда перед этим нужно будет подключить заголовочный файл windows.h, а также получить дескриптор консоли. Для лучшего понимания рассмотрим все в следующем листинге.

#include <stdio.h>
/*Обязательное подключение файла*/
#include <Windows.h>
int main() {
/*Получаение дескриптора устройства стандартного вывода*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
/*Установка белого фона за отдельным символом. Цвет символа - черный*/
SetConsoleTextAttribute(hConsole, (WORD) ((15 << 4) | 0));
return 0;
}

Как видно из листинга, цвет текста и фона изменяется вызовом функции SetConsoleTextAttribute, которая принимает два параметра: дескриптор консоли и выражение вида (WORD)((Background << 4) | Text)), где, как вы уже догадались, Background - цвет фона именно за теми символами, которые выводятся, а Text — цвет текста.

Примечание

В отличие от первого случая с функцией system, параметры Bacground и Text являются числовыми, поэтому необходимо цвета, которые имеют буквенное обозначение, заменять их эквивалентами. Например: A = 10, B = 11 и т.д.

Что делать, если не хочется запоминать номера цветов

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

enum ConsoleColor {
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};

Следует заметить, что если Вам необходимо изменить цвет всего фона, то делать это нужно в первую очередь, так как если вы сделаете иначе, то все, что вы выделили функцией SetConsoleTextAttribute будет иметь другой цвет, заданный в colors.

Листинг рабочей программы

#include <stdio.h>
#include <Windows.h>// Обязательное подключение файла
enum ConsoleColor {
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};
int main() {
/*Получение дескриптора*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
/*Цвет всего фона - белый. Цвет всего текста - черный*/
system("color F0");
puts("Hello World!");
/*Цвет символов - желтый. Цвет фона - темно-серый*/
SetConsoleTextAttribute(hConsole, (WORD) ((DarkGray << 4) | Yellow));
printf("Hello");
/*Цвет символов - светло-зеленый. Цвет фона - желтый*/
SetConsoleTextAttribute(hConsole, (WORD) ((Yellow << 4) | LightGreen));
puts("World!");
return 0;
}

Результаты программы

Изменение цвета в консоли (Си, Си++) (C, Консоль, Полезно)

11 отзывов на “Изменение цвета в консоли (Си, Си++)

  1. MikhailoGrande

    Спасибо! Цвета - это хорошая вещь! Я тут такую мини-праверку пароля сделал (совсем примитивную, ибо я начинающий), и цвета там реально смотрятся! 2

  2. mrShender

    можно просто на рабочем столе зайти в: свойства/цвет и там изменить цвет консоли и теста

  3. van Valdis

    Как на счет большего количества цветов консоли? Есть такая возможность?

  4. Виктор

    Михаил добрый вечер!Скажите а если надо чтобы какой-то один символ выделить другим цветом от всех остальных как в таком случае поступить
    и вообще возможно ли это?

  5. bird

    Статья полезная! Скажите Михаил, а что нужно подключить, что б это было справедливо и для Ubuntu? Спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *