Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-12_1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
456.7 Кб
Скачать

Стили элементов управления общего пользования

Необходимо приложить немало усилий при создании любого типа окна — вашего собственного окна, предопределенного элемента управления или элемента управления общего пользования. Эта работа состоит в выборе правильных флагов стиля окна. (Вспомните, флаги стиля объединяются побитовой операцией OR языка C и передаются вместе как один из двух параметров в функцию CreateWindowEx : или как первый параметр dwExStyle, или как четвертый — dwStyle.) Эта работа достаточна трудна, поскольку флаги стиля влияют на широкий диапазон возможностей, включающих визуальное представление окна (или отсутствие отображения, если флаг WS_VISIBLE пропущен по невнимательности), поведение окна и конкретные типы взаимодействия между окнами.

При создании элементов управления общего пользования существует четыре набора флагов стиля: флаги основного стиля окна (WS_), флаги основного стиля элемента управления общего пользования (CCS_), флаги стиля, специфичные для конкретного элемента управления и флаги расширенного стиля (WS_EX_). Флаги первого из перечисленных типов передаются в функцию CreateWindowEx в качестве четвертого параметра; флаги последнего типа передаются в функцию CreateWindowEx в качестве первого параметра.

Основные стили окна

Основные стили окна имеют имена, начинающиеся с префикса WS_ и могут влиять на окна любого класса. Из примерно двадцати этих стилей окна семь применяются к элементам управления общего пользования: WS_CHILD, WS_VISIBLE, WS_DISABLED, WS_BORDER, WS_TABSTOP, WS_CLIPCHILDREN и WS_CLIPSIBLINGS.

Любое окно элемента управления общего пользования будет использовать бит стиля WS_CHILD, что делает элемент управления дочерним по отношению к какому-то родительскому окну, на поверхности которого будет расположен элемент управления. Когда элемент управления посылает уведомляющие сообщения, он посылает их родительскому окну. Дочерние окна автоматически удаляются при удалении их родительского окна.

Флаг стиля WS_VISIBLE позволяет окну быть отображенным (тем не менее наличие этого флага не гарантирует того, что окно не сможет быть перекрыто другим окном). Частой программной ошибкой является отсутствие флага стиля WS_VISIBLE, что заставляет программиста повсюду (в книгах, журналах, службах поддержки online) искать причину того, что окно не отображается ("потерялось"). Изменяйте, если необходимо, видимость окна после его создания с помощью функций ShowWindow или SetWindowPos.

Флаг WS_DISABLED делает окно запрещенным, т. е. такое окно не получает сообщений от мыши и клавиатуры. Наиболее общее использование этого флага состоит в запрещении элемента управления в диалоговом окне; будучи запрещенными, большинство элементов управления изменяют свой вид, чтобы дать пользователю понять, что они в данный момент недоступны. Например, кнопка OK в диалоговом окне File Open запрещена до тех пор, пока в поле редактирования имени файла — пусто. Кнопка становится разрешенной (доступной), когда какой-либо текст введен в окно задания имени файла. Окно создается один раз с использованием функции CreateWindow, а вызовы функций EnableWindow позволяют делать это окно запрещенным или разрешенным.

Флаг WS_BORDER вызывает появление рамки вокруг окна элемента управления.

Если элемент управления находится в диалоговом окне, то использование флага WS_TABSTOP включает его в список переходов по клавише <Tab>.

Флаги WS_CLIPCHILDREN и WS_CLIPSIBLINGS защищают поверхность дочерних окон от внешнего разрушения. Термин "отсечение" (clipping) относится к прорисовке границ между окнами. В то время, как отсечение всегда разрешено для перекрывающихся и всплывающих окон, оно запрещено для дочерних окон. Флаг WS_CLIPCHILDREN разрешает отсечение, когда рисуется родительское окно дочерних окон, тем самым предотвращая рисование в родительском окне на дочерних окнах. Флаг WS_CLIPSIBLINGS разрешает отсечение между дочерними окнами, имеющими общее родительское окно, для предотвращения соперничества между ними — борьбы между двумя дочерними окнами, имеющими общего родителя, за пиксели в перекрывающихся участках. При работе с дочерними окнами эти два стиля помогают решить проблемы непонятного визуального представления этих окон.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]