Я взламываю приложение ncurses, которое использует 5 окон:
- окно строки состояния - 1 X COLS в нижней части экрана.
- окно заголовка - 1 X COLSпрямо в верхней части экрана.
- 3 окна содержимого - ЛИНИИ - 2 X COLS, между строкой состояния и заголовком.
Обратите внимание, что есть 3 окна содержимого, которые полностью перекрываютсядруг с другом.Я вручную решаю, что нужно перерисовать.Окна заголовка и строки состояния не перекрывают другие окна.
Один из вариантов использования - выбор пользователем файла для загрузки в сетевой демон с использованием меню в одном из окон содержимого.После выбора файла строка состояния действует как грубая строка прогресса, рисуя несколько хешей, чтобы указать, насколько далеко файл был загружен.
Для чего это сводится:
- wclear(status);
- mvwprintw (status, ...);
- wrefresh (status);
Это работает, но по какой-то причине вызывает весь экранбыть перерисованным, вызывая ужасный мерцающий беспорядок.Прочитав руководство, я не могу понять, почему это так;до тех пор, пока строка состояния не перекрывает какие-либо другие окна, перерисовка строки состояния не должна вызывать перерисовку всего экрана?
Я прав или неправильно понял?Есть ли способ предотвратить это?
Код здесь: https://github.com/vext01/hgd/blob/master/nchgdc.c#L812
Обратите внимание, что код в значительной степени не завершен и не имеет полировки =)
Моя реализация ncursesчто из OpenBSD.