Новые проклятия для С-кодеров под Linux Иван Скляров Xakep, номер #058, стр. 058-086-4 Функция wbkgd устанавливает атрибуты окна. Во-первых, с помощью COLOR_PAIR(1) мы инициализируем определенную ранее цветовую пару, а во-вторых, с помощью символа OR '|' (хотя в данном случае его правильно было бы назвать AND) добавляем другие атрибуты. Таким образом, наше окно является окном повышенной яркости (A_BOLD) и мерцающим (A_BLINK). Список других атрибутов можно найти в man curs_attr. В качестве атрибута можно указать и символ в одинарных кавычках, он станет фоновым символом. Функция mvwaddstr помещает строку по середине окна. Существует огромное количество других функций для вывода символов и строк, как, впрочем, и для ввода. Смотри man addch, addchstr, echochar, printw, scanw... После всех приготовлений мы вызываем wrefresh(win) для отображения окна на экране и завершаем работу. Надо сказать, что такой выход не совсем корректен, т.к. сначала нужно удалять все окна (точнее, освобождать память, отведенную под них) с помощью оператора delwin(win). Работаем с клавой OK, окна "рисовать" научились, а что насчет клавиатуры? Посмотрим второй пример (см. программу keeper.c на нашем сайте www.xakep.ru или на диске к журналу). Эта программа - хранитель экрана, который захламляет экран разноцветными окнами в случайном порядке (см. Рис.3), пока не будет нажата клавиша F10. Компиляция: gcc keeper.c -o keeper -lncurses. Большинство инструкций нам знакомы из первого примера, поэтому рассмотрим только новые, которые так или иначе связаны с клавой: curs_set(0) - скрывает физический курсор. noecho() - отключает отображение ввода пользователя. Функция echo(), наоборот, включает. cbreak() - когда эта функция активна, читаемый ввод немедленно доступен программе, иначе он будет буферизироваться до получения целой строки. timeout(13) - работает в паре с функцией getch(), блокирует работу программы на 13 миллисекунд для принятия ввода. keypad(stdscr, TRUE) - позволяет использовать цифровую клавиатуру, клавиши перемещения курсора и функциональные клавиши. В бесконечном цикле мы считываем одиночное нажатие клавиши с помощью getch(). Если нажата F10 (KEY_F(10)), то выходим из цикла и завершаем работу. Макросы других клавиш (KEY_) можно посмотреть в man curs_getch. Хочу заметить, что каждое окно в цикле после появления на экране удаляется из памяти (delwin). Это важно запомнить. Перед выходом из программы функция clear() с последующим refresh() полностью очищает экран. IDIOT Пожалуй, самое частое применение ncurses - это создание меню в программах. Для этого в ней даже имеется специальная библиотека меню. Посмотрим работу этой библиотеки на третьем примере (программу idiot.c также бери с нашего сайта www.xakep.ru или с диска). Idiot выводит меню из 4 пунктов и позволяет одним нажатием клавиши замаунтить CD-ROM или дисковод, вывести все процессы на экран или показать текущую дату и время (см. Рис.4). Т.к. прога предназначена для лентяев и чайников, которые не знают команд, то отсюда и ее название - Idiot. |