Программирование >>  Процедурные приложения 

1 ... 92 93 94 [ 95 ] 96 97 98 ... 150


typedef-определений от этих структур порождается универсальная Структура wndclass, позволяющая программисту не заботиться о формате используемых строк.

Чтобы определить класс окна, приложение должно объявить переменную следующего типа:

WNDCLASS wcApp;

Впоследствии переменная wcApp заполняется информацией о классе окна. Ниже описываются различные поля структуры wndclass.

style

Определяет свойства окна. С помощью операции побитового ИЛИ можно задать комбинацию из нескольких свойств. Возможные свойства поля style перечислены в табл. 17.3.

Свойство

(Описание

CS BYTEALIGNCLIENT

[Задает выравнивание по границе байта размера рабочей области по горизонтали

CS BYTEALIGNWINDOW

[Задает выравнивание по границе байта размера окна по горизонтали

CS CLASSDC

Указывает, что все окна данного класса должны использовать один и тот же контекст [устройства

CS DBLCLKS

При установке этого флага окну будут посылаться сообщения о двойном щелчке

CS GLOBALCLASS

[Указывает, что класс окна является глобальным и должен регистрироваться независимо от значения параметра hlnstance

CS HREDRAW

[Задает операцию перерисовки окна при изменении горизонтального размера

CS NOCLOSE

[Делает неактивной команду close в системном меню

CS ОWNDC

Задает вьщеление каждому окну собственного контекста устройства

CS PARENTDC

[Указывает, что область отсечения дочернего окна будет равна области отсечения родительского окна

CS SAVEBITS

Служит указанием системе сохранять часть окна, перекрываемую другим окном, чтобы [впоследствии не посылать перекрытому окну сообщения WM PAINT, а восстанавливать его содержимое самостоятельно

CS VREDRAW

[Задает операцию перерисовки окна при изменении вертикального размера

IpfnWndProc

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

cbClsExtra

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

cbWndExtra

Содержит информацию о количестве байтов, выделяемых системой после создания экземпляра окна. Этот параметр может быть равным NULL.

hlnstance

Содержит дескриптор экземпляра приложения, регистрирующего класс окна.

hlcon

Содержит дескриптор значка приложения. Этот параметр может быть равным NULL.

hCursor

Содержит дескриптор указателя мыши, используемого в окне приложения. Этот параметр может быть равным null.

hbrBackground



Определяет кисть, используемую для заливки фона окна. Может содержать дескриптор реальной кисти или одну из следующих констант (к задаваемой константе следует прибавить

COLOR ACTIVEBORDER

COLOR ACTIVECAPTION COLOR APPWORKSPACE COLOR BACKGROUND COLOR BTNSHADOW

COLORJBTNTEXT

COLOR CAPTIONTEXT

CQLORJ3RAYTEXT

COLOR HIGHLIGHT COLOR HI GHLIGHTTEXT

CQLOR INACTIVEBORDER

COLOR INACTIVECAPTION

COLOR MENU

COLOR MENUTEXT

COLOR SCROLLBAR

COLOR WINDOW

COLOR WINDOWFRAME

COLOR WINDOWTEXT

Если значение параметра hbrBackground равно NULL, то приложение должно самостоятельно управлять заливкой фона окна при получении сообщения

WM ERASEBKGND.

lpszMemiName

Содержит указатель на строку, завершающуюся нулевым символом и представляющую собой имя ресурса меню. Этот параметр может быть равным null.

lpszClassName

Содержит указатель на строку, завершающуюся нулевым символом и представляющую собой имя класса окна.

Структура WNDCIASSEX

Существует расширенный вариант структуры wndclass, получивший название wndclassex. От wndclassон отличается тем, что дополнительно позволяет использовать в приложении значок малого размера.

typedef struct WNDCLASSEX {

UINT cbSize

UINT style;

WNDPROC IpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HANDLEhlnstance;

HICON hlcon;

HCURSOR hCursor

HBRUSHhbrBackground;

LPCTSTR IpszMenuName;

LPCTSTR IpszClassName;

HICON hlconSm

) WNDCLASSEX;

В поле cbSize задается размер всей структуры. Это обычно делается с помощью выражения sizeof(WNDCLASSEX). В поле hlconSm содержится дескриптор малого значка.



Определение класса окна

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

Следующий фрагмент взят из файла SWP.C и демонстрирует, как можно создать и проинициализировать структуру wndclass:

char szProgName[]= ProgName ; WNDCLASS wcApp;

wcApp.lpszClassName = szProgName; wcApp.hlnstance = hlnst; wcApp.lpfnWndProc = WndProc;

wcApp.hCursor = LoadCursor(NULL, IDC ARROW);

wcApp.hlcon = NULL; wcApp.lpszMenuName = 0;

wcApp.hbrBackground = GetStockObject(WHITE BRUSH); wcApp. style = CS HREDRAW CS VREDRAW;

wcApp.cbClsExtra = 0;

wcApp.cbWndExtra = 0; if (IRegisterClass(SwcApp)) return 0;

Имя программы хранится в переменной szProgNameи записывается в класс окна в поле wcApp.IpszClassName.

Второму полю структуры wndclass, называемому wcApp. hinstance, передается аргумент hlnstфункции winMain(), хранящий дескриптор текущего экземпляра приложения. Полю ipfnWndProc присваивается указатель на оконную процедуру, которая будет обрабатывать все сообщения, посылаемые окну. В файле SWP.C эта функция называется WndProc().

Имя WndProc() задано программистом, т.е. не является стандартным. Прототип функции должен быть описан до выполнения операции присваивания.

В поле wcApp.hCursor хранится дескриптор указателя мыши текущего экземпляра приложения. В нашем примере создается указатель idc arrow(соответствует обычному указателю мыши в виде наклоненной стрелки), дескриптор которого возвращается функцией LoadCursor(). Поскольку в приложении нет устанавливаемого по умолчанию значка, полю wcApp.hlcon присваивается значение null.

Если поле wcApp.lpszMenuName содержит NULL, то Windows считает, что у приложения нет собственного меню. В противном случае должно быть указано название ресурса меню, взятое в кавычки. Функция GetStockObject() возвращает дескриптор кисти, которая используется для заливки фона окна, созданного на базе данного класса. В нашем случае применяется стандартная белая кисть - WHITEBRUSH.

В поле wcApp. style свойства окна задаются как cs HREDRAW в сочетании с cs vredraw. Константы с префиксом cs определены в файле WINUSER.H и могут объединяться с помощью операции побитового ИЛИ (). Константы cs hredraw и cs vredraw указывают Windows, что рабочую область окна нужно перерисовывать всякий раз, когда размер окна изменяется по вертикали или горизонтали.

Последние два поля, wcApp.cbClsExtra и wcApp.cbWndExtra, обычно устанавливают равными 0. Их предназначение - указание дополнительного количества байтов памяти, которые должны быть зарезервированы после создания класса окна или экземпляра самого окна.

Ранее мы уже говорили о том, что в 16-разрядных версиях Windows приложение регистрировало класс окна только в том случае, если не существовало ранее загруженных копий этой же программы. Зарегистрированный класс окна становился доступным для всех остальных программ, поэтому необходимость в повторной его регистрации не возникала. Вот как это делалось:

if (IhPrelnst) {

if (IRegisterClass(SwcApp)) return FALSE; }



1 ... 92 93 94 [ 95 ] 96 97 98 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика