
16) Стиль класса окна
Стиль класса окна определяется при регистрации класса окна. Во всех предыдущих примерах приложений мы не задавали стиль окна, определяя содержимое соответствующего поля в структуре WNDCLASS следующим образом:
wc.style = 0;
Стиль класса окна задается в виде отдельных битов, для которых в файле windows.h определены символические константы с префиксом CS_:
Стиль |
Описание |
CS_BYTEALIGNCLIENT |
Внутренняя область окна (client area) должна быть выравнена по границе байта видеопамяти. Иногда используется для ускорения процесса вывода изображения |
CS_BYTEALIGNWINDOW |
Все окно (не только внутренняя область окна) должно быть выравнено по границе байта видеопамяти |
CS_CLASSDC |
Необходимо создать единый контекст отображения, который будет использоваться всеми окнами, создаваемыми на базе данного класса |
CS_DBLCLKS |
Функция окна будет получать сообщения при двойном щелчке клавишей мыши (double click) |
CS_GLOBALCLASS |
Данный класс является глобальным и доступным другим приложениям. Другие приложения могут создавать окна на базе этого класса |
CS_HREDRAW |
Внутренняя область окна должна быть перерисована при изменении ширины окна |
CS_NOCLOSE |
В системном меню окна необходимо запретить выбор функции закрытия окна (строка Close будет отображаться серым цветом, и ее нельзя выбрать) |
CS_OWNDC |
Для каждого окна, определяемого на базе данного класса, будет создаваться отдельный контекст отображения |
CS_PARENTDC |
Окно будет пользоваться родительским контекстом отображения, а не своим собственным. Родительский контекст - это контекст окна, создавшего другое окно (см. дальше) |
CS_SAVEBITS |
Для данного окна Windows должна сохранять изображение в виде битового образа (bitmap). Если такое окно будет перекрыто другим окном, то после уничтожения перекрывшего окна изображение первого окна будет восстановлено Windows на основании сохраненного ранее образа |
CS_VREDRAW |
Внутренняя область окна должна быть перерисована при изменении высоты окна |
Чаще всего используются стили CS_HREDRAW и CS_VREDRAW:
wc.style = CS_HREDRAW | CS_VREDRAW;
Если для класса заданы стили CS_HREDRAW и CS_VREDRAW, при изменении размеров окна функция окна может получить сообщение WM_PAINT. В этом случае функция окна должна перерисовать часть окна или все окно. Разумеется, если вы просто уменьшили размер окна, перерисовывать ничего не надо, и функция окна в этом случае не получит сообщения WM_PAINT.
Стиль CS_DBLCLKS используется при необходимости отслеживать двойные щелчки мышью. При этом в функцию окна посылаются сообщения WM_LBUTTONDBLCLK и WM_RBUTTONDBLCLK. Если этот стиль не будет задан, как бы быстро вы ни щелкали мышью, функция окна получит только идущие парами сообщения о том, что вы нажимаете и отпускаете левую или правую клавишу мыши.
Остальные приведенные выше классы окна используются реже. Мы будем рассказывать о них по мере необходимости.
Стиль окна
Определенный в классе окна стиль класса окна используется при создании на базе этого класса всех окон. Для дальнейшего уточнения внешнего вида и поведения окна используется другая характеристика - стиль окна. Стиль окна указывается при создании окна функцией CreateWindow. В наших примерах основное окно приложения не имело стиля класса окна, но для него был определен стиль окна WS_OVERLAPPEDWINDOW
Для определения стиля окна используются символические константы с префиксом WS_, определенные в файле windows.h. С помощью этих констант можно определить примерно два десятка стилей окна, однако чаще всего используются несколько основных стилей.
Стили окон:
WS_BORDER -Окно с рамкой;
WS_CAPTION -Окно с заголовком. Этот стиль несовместим со стилем WS_DLGFRAME. При использовании стиля WS_CAPTION подразумевается использование стиля WS_BORDER
WS_CHILD -Дочернее окно. Несовместим со стилем WS_POPUP;
WS_DISABLED -Вновь созданное окно сразу становится заблокированным (не получает сообщения от мыши и клавиатуры);
WS_DLGFRAME -Окно с двойной рамкой без заголовка. Несовместим со стилем WS_CAPTION;
WS_HSCROLL В окне создается горизонтальная полоса просмотра;
WS_MAXIMIZE Создается окно максимально возможного размера;
WS_SYSMENU Окно должно иметь системное меню;
17) wcn.style - в этом поле определяется стиль окна. Установленные флаги CS_HREDRAW и CS_VREDRAW означают,
что всякий раз при изменении ширины или высоты окна будет производиться полная перерисовка рабочей области
окна. Если для класса заданы стили CS_HREDRAW и CS_VREDRAW, при изменении размеров окна функция окна может получить сообщение WM_PAINT. В этом случае функция окна должна перерисовать часть окна или все окно. Разумеется, если вы просто уменьшили размер окна, перерисовывать ничего не надо, и функция окна в этом случае не получит сообщения WM_PAINT.
Стиль CS_DBLCLKS используется при необходимости отслеживать двойные щелчки мышью. При этом в функцию окна посылаются сообщения WM_LBUTTONDBLCLK и WM_RBUTTONDBLCLK. Если этот стиль не будет задан, как бы быстро вы ни щелкали мышью, функция окна получит только идущие парами сообщения о том, что вы нажимаете и отпускаете левую или правую клавишу мыши.