Перекрывающиеся окна


Перекрывающиеся окна имеют заголовок (title bar), рамку и внутреннюю часть окна (client region). Дополнительно перекрывающиеся окна могут иметь системное меню, кнопки для максимального увеличения размера окна и для свертки окна в пиктограмму, вертикальную и горизонтальную полосу просмотра и меню.

  • Перекрывающиеся окна обычно используются в качестве главного окна приложения.

Для определения стиля перекрывающегося окна существует символическая константа WS_OVERLAPPEDWINDOW, определенная как поразрядное ИЛИ нескольких констант:

#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED| \ WS_CAPTION|WS_SYSMENU|WS_THICKFRAME| \ WS_MINIMIZEBOX|WS_MAXIMIZEBOX)

Приложение Windows может создавать несколько перекрывающихся окон, связанных между собой “узами родства” и “отношениями собственности”. При создании окон при помощи функции CreateWindow в качестве восьмого параметра функции можно указатьдескриптор окна-владельца(переменная типа HWND). Окно-владелец уже должно существовать на момент создания окна, имеющего владельца.

Перечислим особенности перекрывающихся окон.

  • Если окно-хозяин сворачивается в пиктограмму, все окна, которыми оно владеет, становятся невидимыми.
  • Если сначала свернули в пиктограмму окно, которым владеет другое окно, а затем и окно-хозяина, то пиктограмма подчиненного окна исчезнет.
  • При уничтожении окна-владельцаавтоматически уничтожаются и все принадлежащие ему окна.
  • Обычное перекрывающееся окно, не имеющее окна-владельца, может располагаться в любом месте экрана и принимать любые размеры. Подчиненные окна располагаются всегда над поверхностью окна-владельца, перекрывая его изображение.
  • Координаты создаваемых функцией CreateWindow перекрывающихся окон указываются по отношению ко всему экрану, т.е. при создании окна с координатами (0,0), оно будет расположено в верхнем левом углу экрана.
  • При изменении размеров перекрывающегося окна функция окна получает сообщение WM_SIZE, в параметрах которого указаны новые размеры окна.

Временные окна

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

Часто для создания выпадающих окон, имеющих рамку, используется стиль WS_POPUPWINDOW, определенный как поразрядное ИЛИ нескольких констант (для того чтобы к временному окну добавить системное меню и заголовок, следует использовать комбинацию WS_POPUPWINDOW | WS_CAPTION):

#define WS_POPUPWINDOW (WS_POPUP|WS_BORDER|WS_SYSMENU)

Перечислим особенности временных окон.

  • Временные окна могут иметь окно-владельца и могут сами владеть другими окнами. Замечания относительно владения перекрывающимися окнами, справедливы и для временных окон.
  • Начало системы координат, используемой при создании временных окон, находится в левом верхнем углу экрана. Поэтому при создании временных окон применяются экранные координаты, как и при создании перекрывающихся окон.
  • При изменении размеров временного окна функция окна получает сообщение WM_SIZE, в параметрах которого указаны новые размеры окна.

Дочерние окна

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

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

Перечислим особенности дочерних окон.

  • Дочерние окна должны иметь окно-родителя. Только дочерние окна могут иметь родителей, перекрывающиеся и временные окна могут иметь окно-хозяина, но не родителя. У дочерних окон могут быть “братья” (или “сестры”).
  • Дочерние окна всегда располагаются на поверхности окна-родителя.
  • При создании дочернего окна начало системы координат расположено в левом верхнем углу внутренней поверхности окна-родителя (но не в верхнем углу экрана, как для перекрывающихся и временных окон).
  • Так как дочернее окно как бы “прилипает” к поверхности окна-родителя, топри щелчке мышью над поверхностью дочернего окна, сообщение от мыши попадет в функцию дочернего, а не родительского окна.
  • При создании дочернего окна в качестве девятого параметра (вместо идентификатора меню, которого не может быть у дочернего окна) функции CreateWindow необходимо указать идентификатор дочернего окна(переменная типа int, любое целое число).
  • Если для приложения создается несколько дочерних окон, для каждого окна необходимо указать свой идентификатор, эти идентификаторы будут использоваться дочерними окнами при отправлении сообщений родительскому окну.
  • Дочернее окно “прилипает” к поверхности родительского окна и перемещается вместе с ним. Оно никогда не может выйти за пределы родительского окна.
  • Все дочерние окна скрываются при сворачивании окна-родителя в пиктограмму и появляются вновь при восстановлении родительского окна.
  • При изменении размеров родительского окна дочерние окна получают сообщение WM_PAINT, но не получают сообщения WM_SIZE, это сообщение попадает только в родительское окно.

Все возможные значения стилей окна:

WS_BORDER Окно с рамкой

WS_CAPTION Окно с заголовком. Этот стиль несовместим со стилем WS_DLGFRAME. При использовании стиля WS_CAPTION подразумевается использование стиля WS_BORDER

WS_CHILD Дочернее окно. Несовместим со стилем WS_POPUP

WS_CHILDWINDOW То же самое, что и WS_CHILD

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

WS_CLIPSIBLINGS При указании этого стиля дочерние окна не перерисовывают свои области, перекрытые "братьями", то есть другими дочерними окнами, имеющими тех же родителей

WS_DISABLED Вновь созданное окно сразу становится заблокированным (не получает сообщения от мыши и клавиатуры)

WS_DLGFRAME Окно с двойной рамкой без заголовка. Несовместим со стилем WS_CAPTION

WS_GROUP Определяет первый орган управления в группе органов управления. Используется только в диалоговых панелях

WS_HSCROLL В окне создается горизонтальная полоса просмотра

WS_ICONIC То же самое, что и WS_MINIMIZE

WS_MAXIMIZE Создается окно максимально возможного размера

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

WS_MINIMIZE Создается окно, уменьшенное до предела (свернутое в пиктограмму). Этот стиль необходимо использовать вместе со стилем WS_OVERLAPPED

WS_MINIMIZEBOX Окно содержит кнопку для сворачивания окна в пиктограмму (минимизации размеров окна). Этот стиль необходимо использовать вместе со стилем WS_OVERLAPPED или WS_CAPTION, в противном случае указанная кнопка не появится

WS_OVERLAPPED Создается перекрывающееся окно, имеющее заголовок и рамку

WS_OVERLAPPEDWINDOW Создается перекрывающееся окно, имеющее заголовок, рамку для изменения размера окна, системное меню, кнопки для изменения размеров окна. Этот стиль является комбинацией стилей WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX и WS_MAXIMIZEBOX

WS_POPUP Создается временное (pop-up) окно

WS_POPUPWINDOW Комбинация стилей WS_POPUP, WS_BORDER и WS_SYSMENU. Для того чтобы сделать системное меню доступным, необходимо дополнительно использовать стиль WS_CAPTION

WS_SYSMENU Окно должно иметь системное меню

WS_TABSTOP Этот стиль указывает элемент управления, на который можно переключиться при помощи клавиши <Tab>. Данный стиль может быть использован только дочерними окнами в диалоговых панелях

WS_THICKFRAME Окно должно иметь толстую рамку для изменения размера окна

WS_VISIBLE Создается окно, которое сразу становится видимым. По умолчанию окна создаются невидимыми, и для их отображения требуется вызывать функцию ShowWindow

WS_VSCROLL В окне создается вертикальная полоса просмотра

Функции CreateWindowEx в качестве первого параметра (dwExStyle) необходимо указать расширенный стиль окна. Список расширенных стилей окна:

Имя константы Описание стиля
WS_EX_ACCEPTFILES Окно способно принимать файлы, перенесенные с использованием технологии drag-drop
WS_EX_DLGMODALFRAME Окно имеет двойную рамку и дополнительно может иметь стиль WS_CAPTION
WS_EX_NOPARENTNOTIFY Дочернее окно с этим стилем не будет посылать родительскому окну сообщение WM_PARENTNOTIFY. Обычно, когда дочернее окно создается или уничтожается или когда вы щелкаете мышью над дочерним окном, это сообщение посылается родительскому окну
WS_EX_TOPMOST Окно будет видно всегда, даже когда оно заблокировано
WS_EX_TRANSPARENT Этот стиль позволяет создать прозрачное окно. Оно получает сообщение WM_PAINT только после того, как все окна-братья получили сообщение WM_PAINT и обновили свои окна

Совместимость расширенных стилей с перекрывающимися, временными и дочерними окнами.

Имя константы Перекрывающееся окно Временное окно Дочернее окно
WS_EX_ACCEPTFILES + + +
WS_EX_DLGMODALFRAME + + +
WS_EX_NOPARENTNOTIFY     +
WS_EX_TOPMOST + +  
WS_EX_TRANSPARENT + + +

 



Дата добавления: 2017-01-26; просмотров: 1605;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.