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

Когда добавляется префикс w, в начало списка аргументов должен быть вставлен указатель типа WINDOW. Когда добавляется префикс mv, в начало списка нужно вставить два дополнительных параметра, координаты y и х. Они задают позицию на экране, в которой выполняется операция, у и х — относительные координаты окна, точка (0, 0) находится в левом верхнем углу окна, а не экрана.

Когда добавляется префикс mvw, необходимо передавать в функцию три дополнительных параметра: указатель WINDOW и значения у и х. Как ни странно, указатель WINDOW всегда в списке предшествует экранным координатам, несмотря на то, что, судя по префиксу, у и х должны быть первыми.

Далее для примера приведен полный набор прототипов для семейств функций addch и printw.

#include

int addch(const chtype char);

int waddch(WINDOW *window_pointer, const chtype char);

int mvaddch(int y, int x, const chtype char);

int mvwaddch(WINDOW *window_pointer, int y, int x, const chtype char);

int printw(char *format, ...);

int wprintw(WINDOW *window_pointer, char *format, ...);

int mvprintw(int y, int x, char *format, ...);

int mvwprintw(WINDOW *window_pointer, int y, int x, char *format, ...);

У многих других функций, например inch, также есть варианты оконные и с перемещением курсора.

<p>Перемещение и обновление окна</p>

Следующие команды позволят вам перемещать и перерисовывать окна:

#include

int mvwin(WINDOW *window_to move, int new_y, int new x);

int wrefresh(WINDOW *window_ptr);

int wclear(WINDOW *window_ptr);

int werase(WINDOW *window_ptr);

int touchwin(WINDOW *window_ptr);

int scrollok(WINDOW *window_ptr, bool scroll_flag);

int scroll(WINDOW *window_ptr);

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

Функции wrefresh, wclear и werase — просто обобщения функций, с которыми вы встречались ранее; они только принимают указатель WINDOW, поэтому могут ссылаться на конкретное окно, а не на окно stdscr.

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

Две функции scroll управляют прокруткой окна. Функция scrollok при передаче логического значения true (обычно ненулевого) включает прокрутку окна. По умолчанию окна не прокручиваются. Функция scroll просто прокручивает окно на одну строку вверх. В некоторые реализации библиотеки curses входит и функция wsctl, которая также принимает количество строк для прокрутки, которое может быть и отрицательным числом. Мы вернемся к прокрутке немного позже в этой главе.

А теперь выполните упражнение 6.4.

Упражнение 6.4. Управление множественными окнами

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

1. Как обычно, вставьте первыми отсортированные объявления:

#include

#include

#include

int main {

 WINDOW *new_window_ptr;

 WINDOW *popup_windov_ptr;

 int x loop;

 int y_loop;

 char a_letter = 'a';

 initscr;

2. Заполните базовое окно символами, обновляя физический экран, когда заполнен логический экран:

 move(5, 5);

 printw("%s", "Testing multiple windows");

 refresh;

 for (y_loop = 0; y_loop < LINES - 1; y_loop++) {

  for (x_loop = 0; x_loop < COLS - 1; x_loop++) {

   mvwaddch(stdscr, y_loop, x_loop, a_letter);

   a_letter++;

   if (a_letter > 'z') a_letter = 'a';

  }

 }

 /* Обновление экрана */

 refresh;

 sleep(2);

Перейти на страницу:

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

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

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

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

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

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

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

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