Перекрывающиеся окна
Перекрывающиеся окна имеют заголовок (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;