Мы рассмотрели цвета терминала в Linux,стоит добавить,что не все терминалы способны поддерживать спец. коды,хоть я таких ещё не встречал.Сегодня рассмотрим как можно работать с цветом в консоли Windows.
Я уже говорил,что у Linux куда больше возможностей в этом плане,чем у Windows.Если терминал изначально способен взаимодействовать с цветом,то для командной строки нужна функция из WinApi.Да,мы с ним ещё не знакомы,там на самом деле ничего сложного,просто библиотека.
Сама функция содержится в библиотеке windows.h и имеет причудливое название,как и большинство функций из WinApi,а именно SetConsoleTextAttr.Принимает она текущий поток окна и цвет.
Для получения необходима текущего потока консоли пригодится GetStdHandle.Принимает просто определённую константу,мы возьмём только на вывод.
Перед практикой рассмотрим какие цвета вообще доступны:
FOREGROUND_BLUE | Содержит синий цвет текста.
FOREGROUND_GREEN | Содержит зеленый цвет текста.
FOREGROUND_RED | Содержит красный цвет текста.
FOREGROUND_INTENSITY | Устанавливает цвет текста более интенсивный.
BACKGROUND_BLUE | Содержит синий цвет фона.
BACKGROUND_GREEN | Содержит зеленый цвет фона.
BACKGROUND_RED | Содержит красный цвет фона.
BACKGROUND_INTENSITY | Устанавливает цвет фона более интенсивный.
COMMON_LVB_REVERSE_VIDEO | Изменяет на противоположные атрибуты цвета текста и цвета фона.
COMMON_LVB_UNDERSCORE | Подчеркивает.
Теперь рассмотрим как это всё применить:
//HANDLE-это просто указатель
HANDLE std=GetStdHandle(STD_OUTPUT_HANDLE);
//установим цвет текста красным
SetConsoleTextAttribute(std,FOREGROUND_RED);
printf("Red text\n");
SetConsoleTextAttribute(std,(WORD)7);
Последняя операция возвращает текста на белый,кодов,что могли бы просто сбросить всё по умолчанию я не нашёл.Что означают эти скобки-я расскажу в следующих уроках.
Вообще в документации имеются только эти цвета,но на самом деле их 16,как использовать их все я так же поведаю в следующих уроках.А пока рекомендую перенять мой опыт и просто написать функцию,которая будет всё упрощать:
void colorstr(WORD color,char *str)
{
HANDLE std=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(std,color);
printf("%s\n",str);
SetConsoleTextAttribute(std,(WORD)7);
}
Всё может показать запутанным,как собственно весь WinApi,особенно после программирования под Linux,но вот такие функции "спасают",с ними становится прощё.
Домашнее задание такое же как и для Linux.
С вами был D21nkMaster.Всего наилучшего!