Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П. 1.8 Классы окон

Когда программа для Windows начинает исполняться, ей требуется определить и зарегистрировать класс окна. Для создания окна операционной системе указывают, к какому клас­су оно принадлежит. Если к моменту создания окна операционной сис­теме известен класс создаваемого окна (например, это определенный в системе или зарегистрированный текущим или другим приложением класс), то можно воспользоваться именем этого класса. Иначе нужно создать новый класс (описать функцию окна и набор используемых ре­сурсов) и зарегистрировать его.

1.8.1. Описание используемых классом окон ресурсов

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

typedef struct

{ UINT style;

WNDPROC IpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HANDLE hinstance;

HICON hicon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR IpszMenuName;

LPCTSTR IpszClassName;

} WNDCLASS;

Например, если описана структура этого типа:

WNDCLASS wс;

то присваивают определенные значения ее полям. Назначение полей этой структуры:

1. style принимает значения из табл. 1. Например:

wc-style = CS_HREDRAW | CS..VREDRAW | CS_DBLCLKS;

2. IpfnWndProc указывает на функцию окна.

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

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

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

6. hIcon указывает на имя пиктограммы (иконки), в которую превраща­ется окно при минимизации. Ресурс иконки загружают функцией Loadlcon:

HICON Loadlcon( HINSTANCE hinst, LPCTSTR IplconName);

Параметр lpIconName указывает на строку с именем загружаемой иконки, а hinst - дескриптор приложения, чей исполняемый код содер­жит загружаемый ресурс. Для загрузки стандартной иконки hinst при­равнивают NULL, а в качестве lpIconName задают одно из значений табл. 2. Например, следующий оператор устанавливает стандартную пиктограмму окна приложения:

wc.hlcon = Loadlcon( NULL, IDI_APPLICATION );

В случае аварийного завершения функция возвращает NULL и при сворачивании окон этого класса операционная система в качестве икон­ки использует логотип Windows.

7. hCursor задает вид курсора мыши при его прохождении над окном. Ресурс курсора загружают функцией LoadCursor:

HCURSOR LoadCursor( HINSTANCE hinst, LPCTSTR IpCursorName);

Параметр lpCursorName указывает на строку с именем загружаемого ресурса, а hinst - дескриптор приложения, чей исполняемый код содер­жит загружаемый ресурс. Для загрузки стандартного курсора hinst при­равнивают NULL, а в качестве lpCursorName задают одно из значений табл. 3. Например, следующий оператор задает курсор в виде стан­дартной стрелки:

wc.hCursor= LoadCursor(NULL, IDC_ARROW);

В случае аварийного завершения функция возвращает NULL и окно будет заимствовать курсор предшествующего по движению мыши окна.

Функции LoadIcon и LoadCursor загружают ресурс иконки или курсо­ра, только если ресурс не был загружен; иначе выбирают дескриптор за­груженного ресурса.

8. hbrBackground задает дескриптор кисти закрашивания фона окна. В качестве кисти можно использовать "чистые" цвета или пикто­грамму. Чаще используют значение системного цвета (табл. 4.) плюс 1. Цвета преобразуют в тип HBRUSH. Например, следующий оператор устанавливает системный цвет закрашивания фона:

wc.hbrBackground = (HBRUSH)(COLORWINDOW+1);

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

9. IpszMenuNaine указывает на имя ресурса главного меню окон этого класса. Если задать NULL, окна этого класса не имеют заданного по умолчанию меню. Например:

wc.lpszMenuName = (LPCTSTR)NULL;

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

wc-lpszClassName = szName;