Стили окон стили классов окон

Стили окон стили классов окон

Стили класса определяют дополнительные элементы класса окна. Два или несколько стилей могут быть объединены, используя побитовый оператор ИЛИ (OR) (|). Чтобы назначить стиль для класса окна, установите этот стиль в члене style структуры WNDCLASSEX . Стили класса следуют ниже.

Стиль Действие
CS_BYTEALIGNCLIENT Выравнивает рабочую область окна по границе байта (по направлению x). Этот стиль влияет на на ширину окна и его горизонтальное размещение при выводе на экран.
CS_BYTEALIGNWINDOW Выравнивает окно по границе байта (по x направлению). Этот стиль влияет на на ширину окна и его горизонтальное размещение при выводе на экран.
CS_CLASSDC Назначает единый контекст устройства, который совместно используется всеми окнами в классе. Поскольку классы окна — это специальный процесс, то имеется возможность создать окно одного и того же класса для нескольких потоков приложения. Имеется также возможность для потоков попытаться использовать контекст устройства одновременно. Когда это случается, система позволяет только одному потоку успешно закончить его операцию рисования.
CS_DBLCLKSit carefully Отправляет сообщение о двойном щелчке оконной процедуре, когда пользователь щелкает два раза мышью, в то время, когда курсор находится внутри окно, принадлежащего классу.
CS_DROPSHADOW Windows XP: Создает эффект падающей тени на окно. Эффект включается и выключается благодаря флажку SPI_SETDROPSHADOW . Как правило, он включается для маленьких, временных окон типа меню, чтобы подчеркнуть их зависимость в Z-последовательности от других окон.
CS_GLOBALCLASS Устанавливает, что класс окна — класс глобальной переменной приложения. Дополнительную информацию, см. в статье Классы глобальной переменной приложения .
CS_HREDRAW Перерисовывает все окно, если перемещение или регулировка размера изменяют ширину рабочей области.
CS_NOCLOSE Отключает кнопку Закрыть (Close) на системном меню окна.
CS_OWNDC Назначает уникальный контекст устройства для каждого окна в классе.
CS_PARENTDC Устанавливает прямоугольник отсечения дочернего окна его родительского окна так, чтобы дочерний элемент мог рисовать родителя. Окно с битом стиля CS_PARENTDC получает обычный контекст устройства от КЭШа системы контекстов устройства. Кэш не дает дочернему элементу контекст устройства родителя или настройки контекста устройства. Определение CS_PARENTDC увеличивает производительность приложения.
CS_SAVEBITS Сохраняет, как точечный рисунок, часть экранного изображения, затененного окном этого класса. Когда окно удаляется, система использует сохраненный точечный рисунок, чтобы восстановить экранное изображение, включая другие окна, которые были затенены. Поэтому, система не отправляет сообщения WM_PAINT в окна, которые были затенены, если память, используемая точечным рисунком не сбрасывалась, и если другие экранные операции не лишили законной силы сохраненное изображение.

Этот стиль полезен для маленьких окон (например, для меню или диалоговых окон), которые показываются краткосрочно на экране, а затем удаляются до того, как происходит другая экранная деятельность. Этот стиль увеличивает время необходимое, чтобы показать на экране окно, потому что система должна сначала распределить память, чтобы сохранить точечный рисунок.

Источник

Операционная система Microsoft Windows 3.1 для программиста

3.1 Стиль класса окна

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

Стиль класса окна задается в виде отдельных битов, для которых в файле 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:

Если для класса заданы стили CS_HREDRAW и CS_VREDRAW, при изменении размеров окна функция окна может получить сообщение WM_PAINT. В этом случае функция окна должна перерисовать часть окна или все окно. Разумеется, если вы просто уменьшили размер окна, перерисовывать ничего не надо, и функция окна в этом случае не получит сообщения WM_PAINT.

Стиль CS_DBLCLKS используется при необходимости отслеживать двойные щелчки мышью. При этом в функцию окна посылаются сообщения WM_LBUTTONDBLCLK и WM_RBUTTONDBLCLK. Если этот стиль не будет задан, как бы быстро вы ни щелкали мышью, функция окна получит только идущие парами сообщения о том, что вы нажимаете и отпускаете левую или правую клавишу мыши.

Остальные приведенные выше классы окна используются реже. Мы будем рассказывать о них по мере необходимости.

Источник

Тема: Классы и стили окон

Основное поведение окна определяется классом окон. Класс окна (он не является классом языка программирования C++) несет информацию о начальном внешнем виде окна, пиктограмме по умолчанию, курсоре и ресурсе меню, связанном с окном; и – об адресе функции, называемой оконной процедурой.

Набор используемых ресурсов класса окна задают в структуре типа WNDCLASS.Эта структура описана следующим образом:

LPCTSTR lpszClassName;
> WNDCLASS;

Например, если описана структура для класса окна

затем присваивают определенные значения ее полям.

Назначение полей этой структуры:

1. style определяет стиль класса окна и поведение окна, например:
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;

2. lpfnWndProc указывает на функцию окна. Она будет рассмотрена позже.

3. cbClsExtra равно количеству дополнительных байтов класса.

4. cbWndExtraравно количеству дополнительных байтов окна этого класса.

5. hlnstance указывает на дескриптор текущего приложения.

6. hlconуказывает на имя пиктограммы (иконки), в которую превращается окно при минимизации.

7. hCursorзадает вид курсора мыши при его прохождении над окном.

8. hbrBackground задает дескриптор кисти закрашивания фона окна.
9. lpszMenuName указывает на имя ресурса главного меню окон этого класса. Если задать NULL, окна этого класса не имеют заданного по умолчанию меню. Например: we.lpszMenuName = (LPCTSTR)NULL;

10.lpszClassName указывает на текстовую строку, содержащую имя ре­гистрируемого класса окон, например:

Стиль класса окна

Стиль класса окна определяется при регистрации класса окна. Стиль класса окна задается в виде отдельных битов, для которых определены символические константы с префиксом CS_. Определенный в классе окна стиль класса окна используется при создании всех окон на базе этого класса.

Чаще всего используются стиль CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS. Если для класса заданы стили CS_HREDRAW и CS_VREDRAW, то при изменении размеров окна функция окна может получить сообщение WM_PAINT. В этом случае функция окна должна перерисовать часть окна или все окно.

Стиль CS_DBLCLKSиспользуется при необходимости отслеживать двойные щелчки мышью. При этом в функцию окна посылаются сообщения WM_LBUTTONDBLCLK и WM_RBUTTONDBLCLK. Если этот стиль не будет задан, функция окна получит только идущие парами сообщения об одиночном нажатии клавиш мыши WM_LBUTTONDOWN и WM_RBUTTONDOWN.

Стили окон, окна основных стилей

Определенный в классе окна стиль класса окнаиспользуется при создании всех окон на базе этого класса. Для дальнейшего уточнения внешнего вида и поведения окна используется другая характеристика —стиль окна. Стиль окна указывается при создании окна функцией CreateWindow. Для определения стиля окна используются символические константы с префиксом WS_.

Рассмотрим чаще всего используемые основные стили:

— перекрывающиеся окна (overlapped window),

— всплывающие (или временные, или выпадающие) окна (pop-up window),

— дочерние окна (child window).

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

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

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

#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED|WS_CAPTION|

Приложение 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, это сообщение попадает только в родительское окно.

Примеры создания окон различных стилей

Ниже приведе фрагмент функции WinMain, создающей окна разных стилей на основе двух классов окон:

// регистрация классов окон с именами «MainWindow”, «Window1», «Window2»

// создание главного перекрывающегося окна

HWND hWndMain = CreateWindow(«MainWindow», «OVERLAPPEDWINDOW»,

WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,NULL);

if(hWndMain == 0) return FALSE;

// создание временного окна

HWND hWndPopup = CreateWindow(«Window1″,»POPUPWINDOW»,

// создание дочернего окна

HWND hWndChild = CreateWindow(«Window2″,»CHILDWINDOW»,

WS_MAXIMIZEBOX, 150,150,250,250, hWndMain, NULL,

Источник

Читайте также:  Как модно раскрасить стену
Оцените статью
Поделиться с друзьями