Шрифт:
Вы можете создать и уничтожить окно с помощью вызовов функций newwin и delwin:
#include <curses.h>
WINDOW *newwin(int num_of_lines, int num_of_cols, int start_y, int start_x);
int delwin(WINDOW *window_to_delete);
Функция
newwin
создает новое окно в позиции экрана (start_y, int start_x
) и с заданным. количеством строк и столбцов. Она возвращает указатель на новое окно или NULL
, если создать окно невозможно. Если вы хотите, чтобы правый нижний угол нового окна совпадал с правым нижним углом экрана, можно задать нулевое количество строк и столбцов. Все окна должны располагаться в пределах экрана. Функция newwin
завершится аварийно, если какая-либо часть окна окажется за пределами экрана. Новое окно, созданное newwin
, абсолютно независимо от всех уже имеющихся окон. По умолчанию оно помещается поверх существующих окон, скрывая (но не изменяя) их содержимое. Функция
delwin
удаляет окно, созданное ранее с помощью функции newwin
. Поскольку при вызове newwin
, по всей вероятности, выделяется память, следует всегда удалять окна, когда в них больше нет нужды. Примечание
Следите за тем, чтобы никогда не было попыток удалить собственные окна библиотеки curses:
stdscr
и curscr
! Когда новое окно создано, как записать в него информацию? У всех уже рассмотренных функций есть универсальные версии, действующие в заданных окнах, и для удобства в них также включено перемещение курсора.
Универсальные функции
Вы уже применяли функции
addch
и printw
для вставки символов на экран. К этим функциям, как и ко многим другим, может быть добавлен префикс либо w
для окна, либо mv
для перемещения курсора, либо mvw
для перемещения и окна. Если вы посмотрите заголовочный файл большинства версий библиотеки curses, то увидите, что многие функции, применявшиеся до сих пор, — простые макросы (#defines
), вызывающие эти более универсальные функции. Когда добавляется префикс
w
, в начало списка аргументов должен быть вставлен указатель типа WINDOW
. Когда добавляется префикс mv
, в начало списка нужно вставить два дополнительных параметра, координаты y и х. Они задают позицию на экране, в которой выполняется операция, у и х — относительные координаты окна, точка (0, 0) находится в левом верхнем углу окна, а не экрана. Когда добавляется префикс
mvw
, необходимо передавать в функцию три дополнительных параметра: указатель WINDOW
и значения у и х. Как ни странно, указатель WINDOW
всегда в списке предшествует экранным координатам, несмотря на то, что, судя по префиксу, у и х должны быть первыми. Далее для примера приведен полный набор прототипов для семейств функций
addch
и printw
.
#include <curses.h>
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
, также есть варианты оконные и с перемещением курсора. Перемещение и обновление окна
Следующие команды позволят вам перемещать и перерисовывать окна:
#include <curses.h>
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);