Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

Перемещение курсора

Для перемещения курсора применяется единственная функция с дополнительной командой, управляющей положением курсора после обновления экрана.

#include <curses.h>

int move(int new_y, int new_x);

int leaveok(WINDOW *window_ptr, bool leave_flag);

Функция

move
просто переносит позицию логического курсора в заданное место на экране. Напоминаем о том, что начало экранных координат (0, 0) находится в левом верхнем углу экрана. В большинстве версий библиотеки curses две глобальные целочисленные переменные,
LINES
и
COLUMNS
, определяют размер физического экрана и могут применяться для определения максимально допустимых значений параметров
new_y
и
new_x
. Вызов
move
сам по себе не приводит к перемещению физического курсора. Он только изменяет позицию на логическом экране, в которой появится следующий вывод. Если вы хотите, чтобы экранный курсор переместился немедленно после вызова функции move, вставьте следом за ним вызов функции
refresh
.

Функция

leaveok
устанавливает флаг, управляющий положением курсора на физическом экране после его обновления. По умолчанию флаг равен
false
, и после вызова
refresh
аппаратный курсор остается в той же точке экрана, что и логический курсор. Если флаг равен
true
, аппаратный курсор можно оставить в случайно выбранной точке экрана. Как правило, значение, устанавливаемое по умолчанию, предпочтительней, т.к. курсор остается в не лишенной смысла позиции.

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

У всех символов, обрабатываемых curses, могут быть определенные атрибуты, управляющие способом отображения символа на экране при условии, что оборудование, применяемое для их отображения, поддерживает требуемый атрибут. Определены следующие атрибуты:

A_BLINK
,
A_BOLD
,
A_DIM
,
A_REVERSE
,
A_STANDOUT
и
A_UNDERLINE
. Вы можете использовать перечисленные далее функции для установки атрибутов по одному или все вместе.

#include <curses.h>

int attron(chtype attribute);

int attroff(chtype attribute);

int attrset(chtype attribute);

int standout(void);

int standend(void);

Функция

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

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

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

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

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

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

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <curses.h>

int main {

 const char witch_one[] = " First Witch ";

 const char witch_two[] = " Second Witch ";

 const char *scan_ptr;

 initscr;

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

 move(5, 15);

 attron(A_BOLD);

 printw("%s", "Macbeth");

 attroff(A_BOLD);

 refresh;

 sleep(1);

 move(8, 15);

 attron(A_STANDOUT);

 printw("%s", "Thunder and Lightning");

 attroff(A_STANDOUT);

 refresh;

 sleep(1);

 move(10, 10);

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

 move(11, 23);

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

  • Читать дальше
  • 1
  • ...
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: