Читаем Основы программирования в Linux полностью

Функция has_colors возвращает true, если терминал поддерживает цвета. Далее следует вызвать функцию start_color, которая вернет OK, если цветовая поддержка успешно инициализирована. После вызова start_color и инициализации цветов переменная COLOR_PAIRS принимает значение, равное максимальному количеству цветовых пар, которые может поддерживать терминал. Переменная COLORS определяет максимальное число доступных цветов, которых, как правило, восемь. Внутри компьютера числа от 0 до 63 действуют как уникальные ID для каждого из доступных цветов.

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

#include

int init_pair(short pair_number, short foreground, short background);

int COLOR_PAIR(int pair_number);

int pair_content(short pair_number, short *foreground, short *background);

В файле curses.h обычно определены некоторые базовые цвета, начинающиеся с префикса COLOR_. Дополнительная функция pair_content позволяет извлечь сведения о ранее определенной цветовой паре.

Для определения цветовой пары номер 1, как красный на зеленом, примените следующую строку:

init_pair(1, COLOR_RED, COLOR_GREEN);

Затем вы сможете получить доступ к этой цветовой паре, применив функцию COLOR_PAIR следующим образом:

wattron(window_ptr, COLOR_PAIR(1));

Она установит вывод в будущем на экран красных символов на зеленом фоне.

Поскольку COLOR_PAIR — это атрибут, вы можете комбинировать его с другими атрибутами. На ПК часто можно добиться на экране цветов повышенной яркости, объединив с помощью поразрядной операции OR атрибут COLOR_PAIR с дополнительным атрибутом A_BOLD:

wattron(window_ptr, COLOR_PAIR(1) | A_BOLD);

Давайте проверим эти функции в примере color.c (упражнение 6.7).

Упражнение 6.7. Цвета

1. Сначала проверьте, поддерживает ли цвета терминал, используемый программой. Если да, то инициализируйте отображение цветов:

#include

#include

#include

#include

int main {

 int i;

 initscr;

 if (!has_colors) {

  endwin;

  fprintf(stderr, "Error — no color support on this terminal\n");

  exit(1);

 }

 if (start_color != OK) {

  endwin;

  fprintf(stderr, "Error — could not initialize colors\n");

  exit(2);

 }

2. Теперь можно вывести допустимое количество цветов и цветовые пары. Создайте семь цветовых пар и выведите их по очереди на экран:

 clear;

 mvprintw(5, 5, "There are %d COLORS, and %d COLOR_PAIRS available", COLORS, COLOR_PAIRS);

 refresh;

 init_pair(1, COLOR_RED, COLOR_BLACK);

 init_pair(2, COLOR_RED, COLOR_GREEN);

 init_pair(3, COLOR_GREEN, COLOR_RED);

 init_pair(4, COLOR_YELLOW, COLOR_BLUE);

 init_pair(5, COLOR_BLACK, COLOR_WHITE);

 init_pair(6, COLOR_MAGENTA, COLOR_BLUE);

 init_pair(7, COLOR_CYAN, COLOR_WHITE);

 for (i = 1; i <= 7; i++) {

  attroff(A_BOLD);

  attrset(COLOR_PAIR(i));

  mvprintw(5 + i, 5, "Color pair %d", i);

  attrset(COLOR_PAIR(i) | A_BOLD);

  mwprintw(5 + i, 25, "Bold color pair %d", i);

  refresh;

  sleep(1);

 }

 endwin;

 exit(EXIT_SUCCESS);

}

Выполнение примера приведет к выводу, показанному на рис. 6.7, за вычетом реальных цветов, которые не отображаются на черно-белом снимке экрана.

Рис. 6.7

Как это работает

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

<p>Переопределение цветов</p>
Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT