Стили блока с окном
Нижеследующие стили могут быть заданы везде, где требуется стиль окна. После того, как орган управления был создан, эти стили не могут быть изменены, за исключением того, как отмечено в описании.
Описание
WS_BORDER
Создает окно с рамкой из тонких линий.
WS_CAPTION
Создает окно, которое имеет область заголовка (включает в себя стиль WS_BORDER ).
WS_CHILD
Создает дочернее окно. Окно с этим стилем не может иметь горизонтальное меню. Этот стиль не может быть использован со стилем WS_POPUP .
WS_CHILDWINDOW
То же самое, что и WS_CHILD.
WS_CLIPCHILDREN
Исключает область, занятую дочерними окнами при прорисовке внутри родительского окна. Используйте этот стиль при создании родительского окна.
WS_CLIPSIBLINGS
Закрепляет дочерние окна относительно друг друга; то есть когда отдельное дочернее окно принимает сообщение WM_PAINT , стиль WS_CLIPSIBLINGS вырезает все другие перекрывающие дочерние окна вне области дочернего окна, которое нужно модифицировать. Если стиль WS_CLIPSIBLINGS не определен, и дочерние окна перекрываются, то, возможно, что при прорисовке внутри рабочей области в одном из дочерних окон, произойдет прорисовка внутри рабочей области другого соседнего дочернего окна.
WS_DISABLED
Создает окно, которое первоначально заблокировано. Заблокированное окно не может принимать вводимую информацию от пользователя. Чтобы изменить это после, окно должно быть создано с использованием EnableWindow .
WS_DLGFRAME
Создает окно, которое имеет рамку стиля, обычно используемую диалоговыми окнами. Окно с этим стилем не может иметь строку заголовка.
WS_GROUP
Устанавливает первый орган управления группы органов управления. Группа состоит из этого первого орган управления и всех заданных органов управления после него, до следующего органа управления со стилем WS_GROUP . Первый орган управления в каждой группе обычно имеет стиль WS_TABSTOP так, чтобы пользователь мог перемещаться от группы, к группе. Пользователь может впоследствии перевести фокус клавиатуры от одного органа управления в группе, к следующему органу управления в группе, при помощи использования клавиши направления.
Вы можете переключать этот стиль включенное и выключенное состояние, чтобы изменить передвижение по блоку диалога. Чтобы изменить этот стиль после, когда окно было создано, используйте функцию SetWindowLong .
WS_HSCROLL
Создает окно, которое имеет горизонтальную линейку прокрутки.
WS_ICONIC
Создает окно, которое вначале свернуто. То же самое, что и стиль WS_MINIMIZE .
WS_MAXIMIZE
Создает окно, которое первоначально развернуто.
WS_MAXIMIZEBOX
Создает окно, которое имеет кнопку развертывания окна. Стиль не может быть объединен со стилем WS_EX_CONTEXTHELP . Стиль WS_SYSMENU должен также быть определен.
WS_MINIMIZE
Создает окно, которое первоначально свернуто. То же самое, что и стиль WS_ICONIC .
WS_MINIMIZEBOX
Создает окно, которое имеет кнопку свертывания окна. Стиль не может быть объединен со стилем WS_EX_CONTEXTHELP . Стиль WS_SYSMENU должен также быть определен.
WS_OVERLAPPED
Создает перекрывающее окно. Перекрывающее окно имеет заголовок и рамку. То же самое, что и стиль WS_TILED .
WS_OVERLAPPEDWINDOW
Создает перекрывающее окно со стилями WS_OVERLAPPED , WS_CAPTION , WS_SYSMENU , WS_THICKFRAME , WS_MINIMIZEBOX и WS_MAXIMIZEBOX . То же самое, что и стиль WS_TILEDWINDOW .
WS_POPUP
Создает выскакивающее окно. Этот стиль не может использоваться со стилем WS_CHILD .
WS_POPUPWINDOW
Создает выскакивающее окно со стилями WS_BORDER , WS_POPUP и WS_SYSMENU . Стили WS_CAPTION и WS_POPUPWINDOW должны объединяться, чтобы сделать меню окна видимым.
WS_SIZEBOX
Создает окно, которое имеет рамку изменения размеров. Одно и то же, что и стиль WS_THICKFRAME .
WS_SYSMENU
Создает окно, которое имеет меню окна в своей строке заголовка. Должен быть также определен стиль WS_CAPTION .
WS_TABSTOP
Устанавливает орган управления, который может получать фокус клавиатуры, когда пользователь нажимает клавишу TAB. Нажатие клавиши TAB переводит фокус клавиатуры в следующий орган управления со стилем WS_TABSTOP .
Вы можете включать и выключать этот стиль, чтобы изменить порядок передвижения по диалоговому окну. Чтобы изменить этот стиль после того, как окно было создано, используйте функцию SetWindowLong .
WS_THICKFRAME
Создает окно, которое имеет рамку изменения размеров. Одно и то же, что и стиль WS_SIZEBOX .
WS_TILED
Создает перекрывающее окно. Перекрывающее окно имеет заголовок и рамку. Одно и то же, что и стиль WS_OVERLAPPED .
WS_TILEDWINDOW
Создает перекрывающее окно со стилями WS_OVERLAPPED , WS_CAPTION , WS_SYSMENU , WS_THICKFRAME , WS_MINIMIZEBOX и WS_MAXIMIZEBOX . Одно и то же, что и стиль WS_OVERLAPPEDWINDOW .
WS_VISIBLE
Создает окно, которое первоначально видимое.
Этот стиль может быть включен и выключен при помощи использования функции ShowWindow или SetWindowPos .
WS_VSCROLL
Создает окно, которое имеет вертикальную линейку прокрутки.
Следующие стили могут быть определены в параметре dwExStyle функции CreateWindowEx .
Описание WS_EX_ACCEPTFILES Определяет, что окно, созданное с этим стилем принимает файлы информационной технологии «перетащи и вставь» (drag-and-drop) . WS_EX_CONTEXTHELP
Включает вопросительный знак в строку заголовка окна. Когда пользователь щелкает мышью по вопросительному знаку, курсор изменяется на указатель с вопросительным знаком. Если пользователь затем щелкает мышью по дочернему окну, оно принимает сообщение WM_HELP . Дочернее окно должно передать сообщение в родительскую оконную процедуру, которая должна вызвать функцию WinHelp , использующую команду HELP_WM_HELP . Прикладная программа Справка (Help) отображает на экране выскакивающее окно, которое обычно содержит справку для дочернего окна. WS_EX_CONTEXTHELP не может использоваться со стилями WS_MAXIMIZEBOX или WS_MINIMIZEBOX .
Позволяет пользователю перемещаться по дочерним окнам родительского окна, используя клавишу табуляции TAB .
Создает окно с двойной рамкой. В отличие от стиля WS_DLGFRAME , прикладная программа может также определять стиль WS_CAPTION , чтобы создать область заголовка для окна.
Определяет, что дочернее окно, созданное с этим стилем не будет посылать сообщение WM_PARENTNOTIFY своему родительскому окну, когда создается или разрушается.
Создает окно с трехмерным стилем рамки, предназначаемым для использования элементов, в которые нет доступа для вводимой информации пользователем.
Определяет, что окно, созданное с этим стилем, которое должно быть помещено выше всех не самых верхних окон и пребывать выше их даже тогда, когда окно дезактивировано.
Источник
Операционная система Microsoft Windows 3.1 для программиста
3.2. Стиль окна
Определенный в классе окна стиль класса окна используется при создании на базе этого класса всех окон. Для дальнейшего уточнения внешнего вида и поведения окна используется другая характеристика — стиль окна. Стиль окна указывается при создании окна функцией CreateWindow. В наших примерах основное окно приложения не имело стиля класса окна, но для него был определен стиль окна WS_OVERLAPPEDWINDOW:
Для определения стиля окна используются символические константы с префиксом WS_, определенные в файле windows.h. С помощью этих констант можно определить примерно два десятка стилей окна, однако чаще всего используются несколько основных стилей.
Мы рассмотрим три основных стиля окон — перекрывающиеся окна (overlapped window), временные окна (pop-up window) и дочерние окна (child window).
Перекрывающиеся (overlapped) окна
Перекрывающиеся окна обычно используются в качестве главного окна приложения. Такие окна имеют заголовок (title bar), рамку и, разумеется, внутреннюю часть окна (client region). Дополнительно перекрывающиеся окна могут иметь (а могут и не иметь) системное меню, кнопки для максимального увеличения размера окна и для сворачивания окна в пиктограмму, вертикальную и горизонтальную полосу просмотра (scroll bar) и меню.
В первых версиях операционной системы Windows (версии 1.х) окна располагались рядом и назывались tiled window (tile — черепица). Сейчас такие окна не используются, вместо них появились перекрывающиеся окна, способные перекрывать окна других приложений. Перекрывающиеся окна называются также окнами верхнего уровня (top-level window).
Файл windows.h содержит следующее определение стиля перекрывающегося окна:
В нашем приложении для определения стиля перекрывающегося окна мы использовали символическую константу WS_OVERLAPPEDWINDOW, определенную как логическое ИЛИ нескольких констант:
Константа WS_OVERLAPPED определяет базовый стиль окна — перекрывающееся окно. Стиль WS_OVERLAPPEDWINDOW в добавление к базовому указывает, что окно должно иметь заголовок (константа WS_CAPTION), системное меню (WS_SYSMENU), толстую рамку для изменения размера окна (WS_THICKFRAME), кнопку минимизации размера окна (WS_MINIMIZEBOX) и кнопку для максимального увеличения размера окна (WS_MAXIMIZEBOX). Если окно имеет заголовок, вы можете его перемещать по экрану.
Вы можете попробовать в предыдущем примере изменить стиль окна, создав свой собственный с использованием приведенных выше констант.
Приложение Windows может создавать несколько окон, связанных между собой «узами родства» и «отношениями собственности». В частности, при создании перекрывающегося окна при помощи функции CreateWindow в качестве восьмого параметра функции вы можете указать так называемый идентификатор окна-владельца. Окно-владелец уже должно существовать на момент создания второго окна, имеющего владельца.
Таким образом, если вы создаете несколько перекрывающихся окон, одни окна могут принадлежать другим.
Если окно-хозяин сворачивается в пиктограмму, все окна, которыми оно владеет, становятся невидимыми. Если вы сначала свернули в пиктограмму окно, которым владеет другое окно, а затем и окно-хозяин, пиктограмма первого (подчиненного) окна исчезает.
Если вы уничтожили окно, автоматически уничтожаются и все принадлежащие ему окна.
Обычное перекрывающееся окно, не имеющее окна-владельца, может располагаться в любом месте экрана и принимать любые размеры. Подчиненные окна располагаются всегда над поверхностью окна-владельца, загораживая его.
Координаты создаваемых функцией CreateWindow перекрывающихся окон указываются по отношению ко всему экрану. Таким образом, если вы создаете перекрывающееся окно с координатами (0, 0), оно будет расположено в верхнем левом углу экрана.
Временные (pop-up) окна
Другим базовым стилем является стиль временных окон, которые обычно используются для вывода информационных сообщений и остаются на экране непродолжительное время.
Временные окна имеют стиль WS_POPUP, определенный в файле windows.h следующим образом:
Временные окна, в отличие от перекрывающихся, могут не иметь заголовок (title bar). Если для временного окна определен заголовок, оно может иметь и системное меню. Часто для создания временных окон, имеющих рамку, используется стиль WS_POPUPWINDOW, определенный в файле windows.h следующим образом:
Если надо добавить к временному окну системное меню и заголовок, стиль WS_POPUPWINDOW следует использовать в комбинации со стилем WS_CAPTION, добавляющим заголовок.
Временные окна могут иметь окно владельца и могут сами владеть другими окнами. Все замечания, сделанные нами относительно владения перекрывающимися окнами, справедливы и для временных окон.
Начало системы координат, используемой при создании временных окон, находится в левом верхнем углу экрана. Поэтому при создании временных окон используются экранные координаты (так же, как и при создании перекрывающихся окон).
При изменении размеров временного окна (так же, как и дочернего) функция окна получает сообщение WM_PAINT, в параметрах которого указаны новые размеры окна.
В общем случае вы можете рассматривать временные окна как специальный вид перекрывающихся окон.
Дочерние окна
Дочерние окна чаще всего используются приложениями Windows. Эти окна нужны для создания органов управления, например таких, как кнопки или переключатели. Windows имеет множество классов, на базе которых созданы стандартные органы управления — кнопки, полосы просмотра и т. п. Все эти органы управления представляют собой дочерние окна. Позже вы будете ими активно пользоваться.
Базовый стиль дочерних окон определяется при помощи константы WS_CHILD:
По аналогии с другими базовыми стилями в файле windows.h определена константа WS_CHILDWINDOW, которая полностью эквивалентна константе WS_CHLD:
В отличие от перекрывающихся и временных окон дочерние окна, как правило, не имеют рамки, заголовка, кнопок минимизации и максимального увеличения размера окна, а также полос просмотра. Дочерние окна сами рисуют все, что в них должно быть изображено.
Перечислим особенности дочерних окон.
Само собой разумеется, что дочерние окна должны иметь окно-родителя (окон-сирот не бывает!). Только дочерние окна могут иметь родителей, перекрывающие и временные окна могут иметь окно-хозяина, но не родителя. У дочерних окон могут быть «братья» (или «сестры», кому что больше нравится).
Дочерние окна всегда располагаются на поверхности окна-родителя. При создании дочернего окна начало системы координат расположено в левом верхнем углу внутренней поверхности окна-родителя (но не в верхнем углу экрана, как это было для перекрывающихся и временных окон).
Так как дочерние окна перекрывают окно-родителя, если вы сделаете щелчок мышью над поверхностью дочернего окна, сообщение от мыши попадет в функцию дочернего, но не родительского окна.
При создании дочернего окна в качестве девятого параметра (вместо идентификатора меню, которого не может быть у дочернего окна) функции CreateWindow необходимо указать созданный вами идентификатор дочернего окна. Таким образом, если для какого-либо окна приложения вы создаете несколько дочерних окон, необходимо для каждого окна указать свой идентификатор (типа int). Этот идентификатор будет использован дочерним окном при отправлении сообщений родительскому окну, поэтому вы должны при создании разных дочерних окон использовать разные идентификаторы, хотя это и не обязательно.
Дочернее окно как бы «прилипает» к поверхности родительского окна и перемещается вместе с ним. Оно никогда не может выйти за пределы родительского окна. Все дочерние окна скрываются при сворачивании окна-родителя в пиктограмму и появляются вновь при восстановлении родительского окна.
При изменении размеров родительского окна дочерние окна, на которых отразилось такое изменение (которые вышли за границу окна и появились вновь), получают сообщение WM_PAINT. При изменении размеров родительского окна дочерние окна не получают сообщение WM_SIZE. Это сообщение попадает только в родительское окно.
Список стилей окна
Приведем полный список возможных стилей окна, определенных в виде символических констант в файле windows.h. Некоторые из приведенных здесь стилей будут подробно рассмотрены в соответствующих главах этого тома или в следующих томах «Библиотеки системного программиста».
Имя константы | Описание стиля |
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 | Этот стиль указывает орган управления, на который можно переключиться при помощи клавиши . Данный стиль может быть использован только дочерними окнами в диалоговых панелях |
WS_THICKFRAME | Окно должно иметь толстую рамку для изменения размера окна |
WS_VISIBLE | Создается окно, которое сразу становится видимым. По умолчанию окна создаются невидимыми, и для их отображения требуется вызывать функцию ShowWindow |
WS_VSCROLL | В окне создается вертикальная полоса просмотра |
WS_TILED | Устаревший стиль, аналогичен WS_OVERLAPPED |
WS_SIZEBOX | Устаревший стиль, аналогичен WS_THICKFRAME |
WS_TILEDWINDOW | Устаревший стиль, аналогичен WS_OVERLAPPEDWINDOW |
MDIS_ALLCHILDSTYLES | Этот стиль используется при создании дочерних MDI-окон и определяет окна, которые могут иметь любые комбинации стилей. По умолчанию дочерние MDI-окна имеют стили WS_MINIMIZE, WS_MAXIMIZE, WS_VSCROLL, WS_HSCROLL |
Приведенные выше стили не всегда совместимы друг с другом. Например, перекрывающееся окно не может быть одновременно еще и временным. Пользуясь приведенной ниже таблицей, вы сможете определить совместимость стилей. В этой таблице символом «+» отмечены стили, которые можно использовать для создания перекрывающихся, временных и дочерних окон.
Источник