Руководство программиста для Linux
4b61df3a

Очистка окна и линий


* int erase() int werase(win)

werase(...) и erase() скопируют пробелы на каждую позицию окна win или stdscr. Например, если вы установили атрибуты цвета в окне и вызвали werase(), окно должно быть окрашено. Однако автор имел некоторые проблемы с COLOR_PAIRS, если определял другие атрибуты, а затем черный по белому, так он писал его собственную стирающую функцию (это низкоуровневый доступ к структуре WINDOW):

void NewClear(WINDOW *win) { int y,x; for ( y = 0 ; y <= win -> _maxy ; y++ ) for ( x = 0 ; x <= win -> _maxx ; x++ ) (chtype *) win-> _line[y][x] = ' '|win-> _attrs; win -> _curx = win -> _cury = 0; touchwin(win); }

Проблема состоит в том, что ncurses иногда делает совершенно бесполезными атрибуты окна, когда заполняет экран пробелами. Если в lib_clrtoeol.c BLANK определен как

#define BLANK ' '|A_NORMAL,

то другие атрибуты окна теряются, пока идет стирание строки.

* int clear() int wclear(win)

То же, что erase(), но будет также установлен clearok() (экран будет очищен с последующим обновлением). * int clrtobot() int wclrtobot(win)

Очистка текущей линии курсора (начинается с символа справа от курсора) и строки под курсором. * int clrtoeol() int wclrtoeol(win)

Очистка текущей строки начиная справа от курсора и до конца строки.



Содержание раздела