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

d0b8d0b7d0bcd0b5d0bdd0b5d0bdd0b8d0b5 d186d0b2d0b5d182d0b0 d0b2 d0bad0bed0bdd181d0bed0bbd0b8 d181d0b8 d181d0b8 статьи

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

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

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

Пример

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

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

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

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

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

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

Оцените статью
Секреты программирования
Добавить комментарий