Ncurses: Обновление неперекрывающегося окна обновляет весь экран. Как этого избежать? - PullRequest
1 голос
/ 08 января 2012

Я взламываю приложение 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.

1 Ответ

0 голосов
/ 13 января 2012

Со страницы руководства wclear:

Процедуры очистки и очистки аналогичны стиранию и стиранию, но они также вызывают clearok, так что экран полностью очищается при следующем вызове wrefresh для этогоокна и перекрашены с нуля.

...