Шаг 40.
Visual Prolog.
Перемещение и изменение размеров окон и изменение состояния окна

    На этом шаге мы рассмотрим перемещение и изменение размеров окон и изменение состояния окна.

    После того как окно создано, приложение может изменять размер окна и его позицию вызовом предиката win_Move. В примере, рассмотренном ниже, показано, как переместить окно на 10 пикселей вправо и вниз щелчком мыши.

   win_event_handler(Window,e_MouseUp(PNT, ShiftCtlAlt, Button),0):-!,
      OuterRCT=win_GetOuterRect(Window), 
      WsFlags=win_GetState(Window),
      ClientRCT=rect_GetClient(WsFlags,const_HasMenu,OuterRCT), 
      NewClient=rect_Offset(ClientRCT,10,10), 
      win_Move(Window, NewClient).

    Обратите внимание, что нельзя просто использовать rect_Offset для прямоугольника, возвращенного win_GetClientRect, потому что этот прямоугольник имеет начало координат (0,0).

Изменение состояния окна

    При создании окно получает набор флагов стиля. Эти флаги определяют начальное состояние окна, а именно: является ли окно видимым, заблокированным или свернутым в пиктограмму. Возможные стили окна приведены ранее в таблице 1 шага 32. Состояние окна можно изменить вызовом предиката win_SetState, а текущее состояние окна получить вызовом предиката win_GetState.

    SetState(Window,wsflags WinStateList)
    Wsflags=win_GetState(Window)

Блокировка и активизация окон

    Заблокированное окно не получает данных с клавиатуры или мыши, но оно может получать сообщения от других окон, от иных приложений и от операционной системы Windows. Приложение обычно отключает такое окно, чтобы не допустить его использования пользователем. Например, приложение может отключить кнопку ОК в диалоговом окне, чтобы пользователь не мог нажать на нее, пока не будут введены требуемые данные в другом элементе управления. Приложение может активизировать заблокированное окно в любое время (обычно активизируется при создании). Для создания заблокированного окна можно определить стиль wsf_Disabled.

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

    Для блокировки и активизации окон используются следующие предикаты:

   win_SetState(Window,[wsf_Disabled]) 
   win_SetState(Window,[wsf_Enabled])

Скрытие и демонстрация окон

    Окно или элемент управления могут быть сделаны полностью невидимыми. В этом случае пользователю они будут недоступны, однако программа может работать с ними как с видимыми. Диалоговые окна могут содержать невидимые элементы управления, которые будут отображены после выполнения каких-либо действий.

    Чтобы скрыть или сделать видимыми окна, используйте следующие предикаты:

   win_SetState(Window,[wsf_Invisible]) 
   win_SetState(Window,[wsf_Visible])

Сворачивание, разворачивание и восстановление окон

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

    Чтобы свернуть, развернуть или восстановить окна, используйте следующие предикаты:

   win_SetState(Window,[wsf_Minimized]) 
   win_SetState(Window,[wsf_Maximized]) 
   win_SetState(Window,[wsf_Restored]) 

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




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