Программирование в Windows API. Учебное пособие
.pdfТаблица 3.1. Стили класса окон
Обозначение |
Действие |
|
|
Выравнивание клиентской области |
|
CS_BYTEALIGNCLIENT |
окна с границей по байту (в |
|
направлении x). Влияет на ширину |
||
|
||
|
окна и его горизонтальное положение. |
|
|
Выравнивание окна с границей по |
|
CS_BYTEALIGNWINDOW |
байту (в направлении x). Влияет на |
|
ширину окна и его горизонтальное |
||
|
||
|
положение. |
|
|
Выделение единого контекста |
|
|
устройства, распределяемого между |
|
CS_CLASSDC |
всеми окнами данного класса. |
|
Система позволяет выполнить |
||
|
||
|
операции графического вывода |
|
|
только одному потоку. |
|
|
Поддержка сообщения о двойных |
|
CS_DBLCLKS |
нажатиях клавиш мыши в окне |
|
|
данного класса. |
|
|
Указывает, что данный класс является |
|
|
глобальным, т.е. доступен для |
|
CS_GLOBALCLASS |
использования во всех модулях |
|
процесса, или даже (при |
||
|
||
|
определённых условиях) всем |
|
|
приложениям. |
|
|
Перерисовка всего окна, если |
|
CS_HREDRAW |
перемещение или настройка размера |
|
изменили горизонтальный размер |
||
|
||
|
окна. |
|
CS_NOCLOSE |
Блокирование кнопки закрытия в |
|
системном меню окна. |
||
|
||
|
Выделение собственного контекста |
|
CS_OWNDC |
устройства для каждого окна данного |
|
|
класса. |
|
|
Установка для окон данного класса |
|
CS_PARENTDC |
контекста устройства родительского |
|
окна, т.е. дочернее окно и родитель |
||
|
||
|
имеют единый контекст. |
|
CS_SAVEBITS |
Сохранение как битовой карты |
|
|
21 |
области экрана, перекрываемой окном данного класса. После закрытия или перемещения такого окна система не передаёт перекрытым окнам сообщение WM_PAINT, а восстанавливает изображение на экране из битовой карты. Этот стиль удобен для небольших окон (например, меню и диалогов).
Перерисовка всего окна, если CS_VREDRAW перемещение или настройка размера
изменили вертикальный размер окна.
Таблица 3.2. Константы системных цветов, используемых для фона окна
Обозначение |
Элемент интерфейса |
|
COLOR_ACTIVEBORDER |
Рамка активного окна. |
|
COLOR_ACTIVECAPTION |
Заголовок активного окна. |
|
COLOR_APPWORKSPACE |
Фон приложений MDI. |
|
COLOR_BACKGROUND |
Рабочий стол. |
|
COLOR_BTNFACE |
Трёхмерные элементы и фон |
|
диалоговых окон. |
||
|
||
COLOR_BTNSHADOW |
Тень трёхмерных элементов. |
|
COLOR_BTNTEXT |
Надписи на кнопках. |
|
COLOR_CAPTIONTEXT |
Текст заголовка. |
|
COLOR_GRAYTEXT |
Надписи на недоступных |
|
элементах. |
||
|
||
COLOR_HIGHLIGHT |
Выделенные элементы. |
|
COLOR_HIGHLIGHTTEXT |
Текст выделенных элементов. |
|
COLOR_INACTIVEBORDER |
Рамка неактивного окна. |
|
COLOR_INACTIVECAPTION |
Заголовок неактивного окна. |
|
COLOR_MENU |
Меню. |
|
COLOR_MENUTEXT |
Текст меню. |
|
COLOR_SCROLLBAR |
Линейка прокрутки. |
|
COLOR_WINDOW |
Фон окна. |
|
COLOR_WINDOWFRAME |
Рамка окна. |
22
3.4 Функция UnregisterClass
Функция UnregisterClass отменяет регистрацию класса окон, освобождая занятую память. Класс должен быть ранее зарегистрирован функцией RegisterClass (или RegisterClassEx). Отмену регистрации системных классов выполнить нельзя.
BOOL UnregisterClass (LPCTSTR lpClassName, HINSTANCE hInstance);
lpClassName
Адрес строки названия или атом-идентификатор класса.
hInstance
Адрес модуля, создавшего данный класс.
Возвращаемое значение:
при успешном завершении: ненулевое значение;
при ошибке: ноль.
3.5 Функция CreateWindow
Функция CreateWindow создаёт окно определённого класса:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
23
lpClassName
Атом-идентификатор или адрес строки названия стандартного или зарегистрированного функцией
RegisterClass (или RegisterClassEx) класса. Если указывается атом, тогда он должен находиться в младшем слове параметра, старшее слово должно быть равно нулю. Если указывается адрес строки, она может содержать имя класса из стандартного набора.
lpWindowName
Адрес строки, содержащей текст окна. Если окно имеет заголовок, этот текст размещается в нём. Если создаётся элемент управления (кнопка, переключатель, метка и т.п), параметр определяет текст элемента. При создании элемента типа STATIC (метка) со стилем SS_ICON (с пиктограммой), параметр определяет имя или идентификатор пиктограммы (для указания идентификатора используется синтаксис "#num").
dwStyle
Набор стилей создаваемого окна (таблица 3.3).
x
Начальная позиция окна по горизонтали относительно экрана (для самостоятельных перекрываемых окон) или относительно левого угла клиентской области родительского окна (для дочерних окон).
Если параметр установлен в CW_USEDEFAULT, для перекрываемых окон система выбирает позицию по умолчанию и игнорирует параметр y, для всплывающих (pop-up) или дочерних (child) окон параметры x и y устанавливаются в 0.
24
y
Начальная позицию окна по вертикали относительно верхнего угла экрана (для перекрываемых или всплывающих окон) или относительно верхнего угла клиентской области родительского окна (для дочерних окон). Для окна списка прокрутки (listbox) определяет начальную позицию по вертикали верхнего угла клиентской области списка относительно верхнего угла клиентской области родительского окна. Если перекрываемое окно создаётся со стилем WS_VISIBLE и параметр x установлен в CW_USEDEFAULT, данный параметр игнорируется.
nWidth
Ширина окна в единицах устройства отображения. Для перекрываемых окон параметр означает высоту окна в экранных координатах. Если параметр установлен в CW_USEDEFAULT, система выбирает ширину и высоту по умолчанию; ширина по умолчанию находится в пределах от начальной координаты x до правой кромки экрана, высота по умолчанию – от начальной координаты y до верха области пиктограммы. CW_USEDEFAULT действителен только для перекрываемых окон, если создаётся всплывающее или дочернее окно, nWidth и nHeight устанавливаются в 0.
nHeight
Высота окна в единицах устройства отображения. Для перекрываемых окон параметр означает высоту окна в экранных координатах. Если параметр nWidth установлен в CW_USEDEFAULT, параметр nHeight игнорируется.
25
hWndParent
Дескриптор родительского окна или окна-владельца. Произвольный для всплывающих окон, требуется для дочерних и зависимых окон.
hMenu
Определяет целочисленное значение, означающее:для самостоятельных перекрываемых и всплывающих окон - дескриптор меню,
используемого с окном, если NULL – используется меню, указанное в классе окна;
Для дочерних окон – командный идентификатор диалогового элемента, который должен быть уникальным в пределах родительского окна.
hInstance
Адрес экземпляра приложения, связанного с создаваемым окном.
lpParam
Некоторый адрес, передаваемый окну через поле lParam структуры CREATESTRUCT с сообщением WM_CREATE. Если приложение создаёт клиентское окно MDI, параметр должен содержать адрес структуры CLIENTCREATESTRUCT.
Возвращаемое значение:
при успешном завершении: дескриптор окна;
если при создании окна возникла ошибка: NULL.
26
Таблица 3.3. Стили окна
Обозначение стиля |
Значение |
|
WS_BORDER |
Окно имеет тонкую рамку. |
|
WS_CAPTION |
Окно имеет строку заголовка |
|
(включает стиль WS_BORDER). |
||
|
||
|
Дочернее окно, окно данного типа не |
|
WS_CHILD |
может иметь меню. Данный стиль не |
|
может быть использован совместно |
||
|
||
|
со стилем WS_POPUP. |
|
WS_CHILDWINDOW |
Аналогичен стилю WS_CHILD. |
|
|
Исключает область, занимаемую |
|
WS_CLIPCHILDREN |
дочерним окном, когда рисование |
|
|
происходит в родительском окне. |
|
|
Отсекает дочерние окна таким |
|
|
образом, что когда определённое |
|
|
дочернее окно получает сообщение |
|
WS_CLIPSIBLINGS |
WM_PAINT,все другие |
|
|
перекрывающие дочерние окна |
|
|
отсекаются из области, которая |
|
|
должна быть обновлена. |
|
|
Окно изначально недоступно, т.е. не |
|
WS_DISABLED |
может быть использовано |
|
|
пользователем для ввода. |
|
|
Окно имеет рамку, обычно |
|
WS_DLGFRAME |
используемую для диалоговых окон. |
|
|
Не может иметь заголовок. |
|
|
Окно является первым в группе |
|
|
элементов управления. Группа |
|
|
представляет собой данное и все |
|
|
последующие окна до следующего |
|
WS_GROUP |
элемента, имеющего стиль |
|
WS_GROUP. Первый элемент |
||
|
||
|
каждой группы обычно имеет стиль |
|
|
WS_TABSTOP, так что пользователь |
|
|
может перемещаться от группы к |
|
|
группе. |
|
WS_HSCROLL |
Окно имеет горизонтальную |
|
линейку прокрутки. |
||
|
||
WS_ICONIC |
Окно изначально минимизировано. |
|
Аналогичен стилю WS_MINIMIZE. |
||
|
||
|
27 |
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_CAPTION, |
|
|
WS_SYSMENU, |
|
WS_OVERLAPPEDWINDOW |
WS_THICKFRAME, |
|
|
WS_MINIMIZEBOX и |
|
|
WS_MAXIMIZEBOX. Аналогичен |
|
|
стилю WS_TILEDWINDOW. |
|
WS_POPUP |
Окно всплывающее. Не может |
|
использоваться вместе с WS_CHILD. |
||
|
||
|
Окно всплывающее и имеющее |
|
|
стили WS_BORDER и |
|
WS_POPUPWINDOW |
WS_SYSMENU. Для включения |
|
меню окна должны быть указаны |
||
|
||
|
стили WS_CAPTION и |
|
|
WS_POPUPWINDOW. |
|
|
Окно имеет рамку, позволяющую |
|
WS_SIZEBOX |
изменять его размеры. Аналогичен |
|
|
стилю WS_THICKFRAME. |
|
|
Окно имеет системное меню в |
|
WS_SYSMENU |
заголовке. Также должен быть |
|
|
указан стиль WS_CAPTION. |
28
|
Окно является элементом |
|
|
управления, который может |
|
|
получить фокус ввода, когда |
|
WS_TABSTOP |
пользователь нажимает клавишу |
|
|
TAB (переключение фокуса с одного |
|
|
элемента, имеющего стиль |
|
|
WS_TABSTOP, на другой). |
|
|
Окно имеет рамку, позволяющую |
|
WS_THICKFRAME |
изменять его размеры. Аналогичен |
|
|
стилю WS_SIZEBOX. |
|
|
Окно перекрываемое, имеет |
|
WS_TILED |
заголовок и рамку. Аналогичен |
|
|
стилю WS_OVERLAPPED. |
|
|
Окно перекрываемое и имеющее |
|
|
стили WS_CAPTION, |
|
|
WS_SYSMENU, |
|
WS_TILEDWINDOW |
WS_THICKFRAME, |
|
WS_MINIMIZEBOX и |
||
|
||
|
WS_MAXIMIZEBOX. |
|
|
Аналогичен стилю |
|
|
WS_OVERLAPPEDWINDOW. |
|
WS_VISIBLE |
Окно изначально видимое. |
|
WS_VSCROLL |
Окно имеет вертикальную линейку |
|
прокрутки. |
||
|
3.6 Функция ShowWindow
Функция ShowWindow отображает окно в указанном режиме:
BOOL ShowWindow (HWND hWnd, int nCmdShow);
hWnd
Дескриптор окна. nCmdShow
Код режима отображения окна (таблица 3.4).
29
Возвращаемое значение:
если до вызова окно было видимым: ненулевое значение;
если окно было скрыто: ноль.
Таблица 3.4. Режимы отображения окна.
Обозначение режима |
Значение |
|
|
Сворачивает окно, даже если |
|
|
соответствующий поток висит. |
|
SW_FORCEMINIMIZE |
Рекомендуется использовать этот режим |
|
|
только для сворачивания окна из |
|
|
другого потока. |
|
SW_HIDE |
Скрывает данное окно и активизирует |
|
другое окно. |
||
|
||
SW_MAXIMIZE |
Максимизирует окно. |
|
SW_MINIMIZE |
Минимизирует окно и активизирует |
|
следующее окно верхнего уровня. |
||
|
||
|
Активизирует и отображает окно. |
|
SW_RESTORE |
Если окно свёрнуто или развёрнуто, |
|
система восстанавливает исходный |
||
|
||
|
размер и положение. |
|
SW_SHOW |
Активизирует окно и отображает его в |
|
текущей позиции и размерах. |
||
|
||
|
Устанавливает режим отображения по |
|
SW_SHOWDEFAULT |
значению, указанному в структуре |
|
|
STARTUPINFO. |
|
SW_SHOWMAXIMIZED |
Активизирует и максимизирует окно. |
|
SW_SHOWMINIMIZED |
Активизирует и минимизирует окно. |
|
SW_SHOWMINNOACTIVE |
Отображает окно в свёрнутом |
|
состоянии, не активизирует его. |
||
|
||
SW_SHOWNA |
Отображает окно в его текущей позиции |
|
и размерах, но не активизирует его. |
||
|
||
|
Отображает окно в его последней |
|
SW_SHOWNOACTIVATE |
позиции и размерах, но не активизирует |
|
|
его. |
|
|
Активизирует и отображает окно. Если |
|
SW_SHOWNORMAL |
окно свёрнуто или развёрнуто, система |
|
восстанавливает исходный размер и |
||
|
||
|
положение. |
|
|
30 |
