Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 94 95 96 97 98 99 100 101 102 ... 324

Атрибуты символов

У всех символов, обрабатываемых curses, могут быть определенные атрибуты, управляющие способом отображения символа на экране при условии, что оборудование, применяемое для их отображения, поддерживает требуемый атрибут. Определены следующие атрибуты: A_BLINK, A_BOLD, A_DIM, A_REVERSE, A_STANDOUT и A_UNDERLINE. Вы можете использовать перечисленные далее функции для установки атрибутов по одному или все вместе.

<b>#include &lt;curses.h&gt;</b>

<b>int attron(chtype attribute);</b>

<b>int attroff(chtype attribute);</b>

<b>int attrset(chtype attribute);</b>

<b>int standout(void);</b>

<b>int standend(void);</b>

Функция attrset устанавливает атрибуты curses, функции attron и attroff включают и отключают заданные атрибуты, не портя остальные, а функции standout и standend обеспечивают более выразительный режим выделения или "лучший из всех" режим. На большинстве терминалов выбирается инверсия.

Выполните упражнение 6.2.

Упражнение 6.2. Перемещение, вставка и атрибуты

Теперь, когда вы знаете больше об управлении экраном, можно испытать более сложный пример moveadd.c. Вы включите несколько вызовов функций refresh и sleep в этот пример, чтобы на каждом шаге видеть, как выглядит экран. Обычно программы с использованием библиотеки curses стараются обновлять экран как можно реже, поскольку это не слишком высокопроизводительная операция. Программный код написан с некоторой долей искусственности для обеспечения большей наглядности.

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

#include &lt;stdio.h&gt;

#include &lt;unistd.h&gt;

#include &lt;stdlib.h&gt;

#include &lt;string.h&gt;

#include &lt;curses.h&gt;

int main() {

 const char witch_one[] = &quot; First Witch &quot;;

 const char witch_two[] = &quot; Second Witch &quot;;

 const char *scan_ptr;

 initscr();

2. Теперь для трех начальных текстовых фрагментов, которые появляются на экране через определенные интервалы, включите и отключите соответствующие флаги атрибутов;

 move(5, 15);

 attron(A_BOLD);

 printw(&quot;%s&quot;, &quot;Macbeth&quot;);

 attroff(A_BOLD);

 refresh();

 sleep(1);

 move(8, 15);

 attron(A_STANDOUT);

 printw(&quot;%s&quot;, &quot;Thunder and Lightning&quot;);

 attroff(A_STANDOUT);

 refresh();

 sleep(1);

 move(10, 10);

 printw(&quot;%s&quot;, &quot;When shall we three meet again&quot;);

 move(11, 23);

 printw(&quot;%s&quot;, &quot;In thunder, lightning, or in rain ?&quot;);

 move(13, 10);

 printw(&quot;%s&quot;, &quot;When the hurlyburly's done, &quot;);

 move(14, 23);

 printw(&quot;%s&quot;, &quot;When the battle's lost and won.&quot;);

 refresh();

 sleep(1);

3. Действующие лица идентифицированы, и их имена выводятся посимвольно:

 attron(A_DIM);

 scan_ptr = witch_one + strlen(witch_one) - 1;

 while (scan_ptr != witch_one) {

  move(10, 10);

  insch(*scan_ptr--);

 }

 scan_ptr = witch_two + strlen(witch_two) - 1;

 while (scan_ptr != witch_two) {

  move(13, 10);

  insch(*scan_ptr--);

 }

 attroff(A_DIM);

 refresh();

 sleep(1);

4. В заключение переместите курсор в правый нижний угол экрана, а затем подготовьте и выполните завершение:

 move(LINES - 1, COLS - 1);

 refresh();

 sleep(1);

 endwin();

 exit(EXIT_SUCCESS);

}

Когда вы выполните программу, заключительный экран будет выглядеть так, как показано на рис. 6.3. К сожалению, снимок экрана не дает полного впечатления и не показывает курсор, установленный в правом нижнем углу экрана. Эмулятор xterm может быть более подходящей средой для точного отображения программ, чем обычная консоль.

Рис. 6.3

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

После инициализации некоторых переменных и экрана с помощью библиотеки curses вы применили функции move для перемещения курсора по экрану. Посредством функций attron и attroff вы управляли атрибутами текста, выводимого в заданную точку экрана. Далее перед закрытием библиотеки curses и завершением программа продемонстрировала, как вставлять символы функцией insch.

Клавиатура

Наряду с предоставлением интерфейса, облегчающего управление экраном, библиотека curses также предлагает средства, облегчающие управление клавиатурой.

1 ... 94 95 96 97 98 99 100 101 102 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий