[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Окна в среде Curses

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

Примечание: Это не относится к панелям. Панель - это окно, которое не ограничено размерами экрана. Дополнительные сведения об этом приведены в разделе Панели.

В программах, использующих curses, окна рассматриваются как переменные с типом WINDOW. Тип данных WINDOW определен в файле /usr/include/curses.h как структура данных C. При создании окна система выделяет область машинной памяти для этой структуры данных. В этой структуре хранятся все параметры окна. Изменив данные окна во внутренней памяти, программа должна запустить функцию wrefresh (или аналогичную ей) для обновления физического экрана. Только после этого внутренние изменения отразятся на внешнем дисплее.

Структура стандартного окна

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

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

В дополнение к stdscr, вы можете определить и другие окна. Такие окна называются пользовательскими. Как и stdscr, пользовательские окна представляют собой структуры, хранящиеся в памяти. Вы можете создать любое количество окон, их число ограничено лишь объемом доступной памяти. Программы, использующие curses, могут одновременно управлять стандартным окном и пользовательскими окнами.

Структура текущего окна

Помимо окна stdscr, функции curses поддерживают еще одно виртуальное окно - curscr (текущий экран). Окно curscr служит внутренним представлением изображения, показанного в настоящий момент на дисплее.

Если программе необходимо синхронизовать внутреннее и внешнее представление, она вызывает функцию обновления физического дисплея wrefresh (при работе с stdscr - refresh).

refresh или wrefresh Обновляет дисплей и curscr для отображения внесенных изменений.

Окно curscr зарезервировано в curses для внутреннего применения и не предназначено для пользователей.

Вложенные окна

Функции curses позволяют создавать вложенные окна. Вложенные окна - это прямоугольные фрагменты, расположенные внутри других окон. Вложенное окно тоже относится к типу данных WINDOW. Окно, содержащее вложенное окно, называется "родительским", а вложенное окно - "дочерним".

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

touchline Выполняет принудительное обновление группы строк при следующем вызове функции wrefresh .
touchwin Выполняет принудительное обновление всех символов в окне при следующем вызове функции wrefresh. Функция touchwin не сохраняет информацию об оптимизации. Эта функция полезна при работе с перекрывающимися окнами.

При обновлении родительского окна, автоматически обновляются и все дочерние окна.

Вложенное окно также может содержать дочерние окна. Процесс организации многоуровневых окон называется вложением.

Удалить родительское окно можно только после того, как будут удалены все дочерние окна (это можно сделать с помощью функции delwin).

delwin Удаляет структуру данных, описывающую окно.

При попытке удалить окно вместе с его дочерними окнами функция Curses вернет сообщение об ошибке.

Панели

Панель - это окно, размер которого не ограничен размерами дисплея, а сама панель не связана ни с одной определенной областью дисплея. Как правило, панели бывают больше физического дисплея, поэтому в любой момент времени пользователь видит лишь часть панели.

Панели удобны для представления больших массивов связанных данных, которые желательно хранить в одном окне, но не обязательно просматривать все одновременно.

Как и окна, панели могут содержать вложенные панели. Вложенные панели находятся внутри родительских. В отличие от вложенных окон, их расположение определяется не экранными координатами, а относительными координатами родительской панели.

prefresh и pnoutrefresh Обновляет дисплей и curscr для отображения изменений, внесенных в содержимое панели.

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

К панелям применимы все функции curses, за исключением newwin, subwin, wrefresh и wnoutrefresh, вместо которых должны применяться функции newpad, subpad, prefresh и pnoutrefresh.

Связанная информация

Глава 2, Библиотека curses

Список дополнительных функций curses


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]