Шаг 43.
Visual Prolog.
Упорядочивание и обновление окон

    На этом шаге мы рассмотрим упорядочивание и обновление окон.

Упорядочивание окон

    Иногда нужно расположить окно поверх остальных окон без изменения фокуса. Это может быть выполнено при помощи следующего предиката:

   win_BringToTop(Window)

Обновление окон

    Приложение всегда должно быть готово перерисовать заданную область окна в ответ на событие e_Update(Rct). Если окно было изменено, восстановлено, частично или полностью объявлено недостоверным, а также, если перекрывающее окно было полностью или частично удалено, произойдет событие e_Update(Rct). Для простоты приложение может перерисовывать все окно, а система управления окнами автоматически отсечет рисунок до той области, где необходимо обновление.

    Так как приложение должно восстанавливать содержимое окна на событие е_Update очень важно организовать приложение так, чтобы все перерисовки окна выполнялись именно здесь. Это локализует все перерисовки окна в одном месте в коде.

    Рассмотрим несколько предикатов, которые используются для управления обновлением окна. Предикаты также могут применяться и для оптимизации изображения, чтобы минимизировать объем перерисовываемой области.

Недостоверное окно

   win_Invalidate(Window)

    Предикат win_Invalidate - стандартный способ для объявления окна недостоверным и требующим перерисовки. В этом случае обработчику событий окна будет послано событие e_Update.

   win_Invalidate(Window,Rct)

    Этот предикат может использоваться для определения того, какая часть окна нуждается в перерисовке.

Сделать достоверной часть окна

   win_ValidateRect(Window,Rct)

    Этот предикат используется для того, чтобы сообщить системе управления окнами, что указанной части окна не требуется перерисовка.

Определение необходимости перерисовки части окна

   win_NeedsUpdate(Window,Rct)

    Предикат win_NeedsUpdate иногда используется для ускорения перерисовки окна или печати. Перед отображением области, которая требует длительных вычислений, просмотра базы данных или сложного изображения, можно использовать этот предикат, чтобы проверить, должна ли обозначенная область действительно быть перерисована. В то время как событие e_Update определит одну область (соответствующую, скажем, области, только что открытой другим окном), коду обновления может потребоваться сегментировать изображение областями, заданными основными структурами данных.

Принудительная перерисовка окна

   win_Update(Window)

    Предикат win_Update инициирует любые события обновления, которые могут находиться в очереди событий, и гарантирует, что окно будет полностью перерисовано. Например, это может быть необходимо перед прокруткой части окна.

    На следующем шаге мы рассмотрим события от окон.




Предыдущий шаг Содержание Следующий шаг