Win32 API. Окна - Состояние Показа

ОГЛАВЛЕНИЕ

 

Состояние Показа

В любое данное время, окно может быть активным или неактивным; скрытым или видимым; свернутым, развернутым или восстановленным. Эти качества упоминаются одним словом как состояние показа (show state) окна.

Активное окно

Активное окно (active window) - окно верхнего уровня прикладной программы, с которым пользователь в настоящее время работает. Чтобы позволить пользователю легко идентифицировать активное окно, Windows помещает его вверху Z-последовательности и заменяет цвет его строки заголовка и рамки определенными системой цветами активного окна. Активным окном может быть только окно верхнего уровня. Когда пользователь работает с дочерним окном, Windows активизирует родительское окно верхнего уровня, связанное с дочерним окном.

Одновременно в системе может быть активным только одно окно верхнего уровня. Пользователь активизирует окно верхнего уровня, щелкая мышью по нему (или по одному из его дочерних окон) или используя комбинацию клавиш ALT+ESC или ALT+TAB. Прикладная программа активизирует окно верхнего уровня, вызывая функцию SetActiveWindow. В число других функций, которые могут заставлять Windows активизировать различные окна верхнего уровня, включены SetWindowPos, DeferWindowPos, SetWindowPlacement и DestroyWindow. Хотя прикладная программа может активизировать различное окно верхнего уровня в любое время, чтобы избежать запутывания пользователя, она поступает так только в ответ на действие пользователя. Прикладная программа использует функцию GetActiveWindow, чтобы найти данные о дескрипторе активного окна.

Когда активация переходит от окна верхнего уровня в одной из прикладных программ к окну верхнего уровня другой программы, Windows посылает сообщение WM_ACTIVATEAPP обеим прикладным программам, сообщая им об изменении. Когда активация переходит среди различных окон верхнего уровня в той же самой прикладной программе, Windows посылает обоим окнам сообщение WM_ACTIVATE.

Видимость

Окно может быть видимым или скрытым. Windows отображает на экране видимое окно (visible window). Она скрывает скрытое окно (hidden window), не прорисовывая его. Если окно видимое, пользователь может обеспечивать окно вводимой информацией и просматривать выводимую информацию в окне. Если окно скрытое, оно в действительности заблокировано. Скрытое окно может обрабатывать сообщения из Windows или из других окон, но оно не может обрабатывать вводимую информацию от пользователя или отображать на экране выводимую информацию. Прикладная программа устанавливает состояние видимости окна при создании окна. Позже, прикладная программа может изменять состояние видимости.

Окно видимо тогда, когда для окна установлен стиль WS_VISIBLE. По умолчанию, функция CreateWindowEx создает скрытое окно, если прикладная программа не определяет стиль WS_VISIBLE. Как правило, прикладная программа устанавливает стиль WS_VISIBLE после того, как она создала окно, чтобы хранить скрытыми от пользователя подробности процесса создания его. Например, прикладная программа может сохранять скрытым новое окно, пока она настраивает вид этого окна. Если стиль WS_VISIBLE определен в CreateWindowEx, Windows, после создания окна, посылает окну сообщение WM_SHOWWINDOW, но перед тем как показать его на экране.

Прикладная программа может определить, является ли окно видимым, используя функцию IsWindowVisible. Прикладная программа может показывать (делать видимым) или скрывать окно, используя функции ShowWindow, SetWindowPos, DeferWindowPos или SetWindowPlacement. Эти функции показывают или скрывают окно, устанавливая или удаляя WS_VISIBLE стиль для окна. Они также посылают сообщение WM_SHOWWINDOW окну перед показом или сокрытием его.

Когда окно владельца свернуто, Windows автоматически скрывает связанные с владельцем окна. Точно так же, когда окно владельца восстановлено, Windows автоматически показывает связанные с владельцем окна. В обоих случаях, Windows посылает сообщение WM_SHOWWINDOW окнам имеющим окно -"хозяина" перед сокрытием или показом их. Иногда, прикладной программе возможно надо скрыть находящиеся в собственности окна без необходимости свертывать или скрывать владельца. В этом случае, прикладная программа использует функцию ShowOwnedPopups. Эта функция устанавливает или удаляет стиль WS_VISIBLE для всех находящихся в собственности окон и посылает сообщение WM_SHOWWINDOW находящимся в собственности окнам перед сокрытием или показом их. Скрытие окна владельца не оказывает никакого эффекта на состоянии видимости находящихся в собственности окон.

Когда родительское окно видимое, связанные с ним дочерние окна также видимы. Точно так же, когда родительское окно скрыто, его дочерние окна также скрыты. Свертывание родительского окна не оказывает никакого эффекта на состояние видимости дочерних окон; то есть дочерние окна свертываются вместе с родителем, но стиль WS_VISIBLE не изменяется.

Даже если окно имеет стиль WS_VISIBLE, пользователь может быть не способен видеть окно на экране; другие окна могут полностью накладываться на него, или оно, возможно, было перемещено за края экрана. А также, видимое дочернее окно подчиненно правилам закрепления, установленными для него родительскими и дочерними взаимоотношениями. Если родительское окно окна не видимо, оно будет также невидимо. Если родительское окно перемещается за краями экрана, дочернее окно также перемещается, потому что дочернее окно выводится относительно верхнего левого угла родителя. Например, пользователь может перемещать родительское окно, содержащее дочернее окно достаточно далеко от края экрана, так что пользователь может быть не способен видеть дочернее окно, даже притом, что дочернее окно и его родительское окно оба имеют WS_VISIBLE стиль.