Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_3_slaydy_2012.doc
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
376.32 Кб
Скачать

Лекция №3. Регистрация класса окна. Создание окна.

При инициализации окна необходимо описать параметры окна и зарегистрировать его в Windows.

Параметры окна задаются с помощью структуры данных WNDCLASS. Вот ее определение:

typedef struct _WNDCLASS {

UINT style;

WNDPROC lpfnWndProc;

Int cbClsExtra;

Int cbWndExtra;

HANDLE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

} WNDCLASS;

  • style — Задает стиль окна. Если использовать стиль как wc.style = CS_HREDRAW | CS_VREDRAW, то это означает, что окно будет перерисовываться при изменении его размеров по горизонтали или по вертикали. Полный список стилей с их описанием приведен в библиотеке MSDN.

  • lpfnWndProc — Указатель на оконную процедуру. Окна, созданные на основе одного и того же экземпляра структуры WNDCLASS будут совместно использовать одну и ту же оконную процедуру. Например можно использовать как wc.lpfnWndProc = WndProc;

  • cbClsExtra и cbWndExtra — Это дополнительные области памяти, которые можно использовать в своих собственных целях. Если дополнительные области памяти не нужны, то обоим параметрам присваивается 0: wc.cbClsExtra = 0; wc.cbWndExtra = 0;

  • hInstance — поле для дескриптора экземпляра приложения, например так: wc.hInstance = instanceHandle;

  • hIcon — Дескриптор значка, используемого для окон, создаваемых на основе данного класса. Существует несколько стандартных значков операционной системы и можно выбрать один из них. Например: wc.hIcon = LoadIcon(0, IDI_APPLICATION);

  • hCursor — Дескриптор курсора приложения, определяющий как будет выглядеть указатель мыши, когда он находится в клиентской области окна. Здесь также есть несколько встроенных типов курсоров. Например так: wc.hCursor = LoadCursor(0, IDC_ARROW);

  • hbrBackground — Цвет фона клиентской области окна.

  • lpszMenuName — Задает меню окна. Если нет меню, то значение этого поля равно 0.

  • lpszClassName — Определяет имя создаваемого класса окна. Можно выбрать любое имя. Имя используется для идентификации структуры данных класса, чтобы можно было обращаться к ней в дальнейшем. Например на С, это будет выглядеть так: wc.lpszClassName = "Hello";

После описания параметров класса окна, необходимо зарегистрировать окно в Windows с помощью функции RegisterClass, которая получает указатель на структуру WNDCLASS. В случае успешного завершения функция возвращает 0. Например на С, это будет выглядеть так: if(!RegisterClass(&wc))

На ассемблере регистрация класса окна будет выглядеть так:

REG_CLASS:

; заполняем структуру окна

MOV [WC.CLSSTYLE],style

; процедура обработки сообщений

MOV [WC.CLWNDPROC], OFFSET WNDPROC

MOV [WC.CLSCEXTRA], 0

MOV [WC.CLWNDEXTRA], 0

MOV EAX, [HINST]

MOV [WC.CLSHINSTANCE], EAX

; ---------- иконка окна

PUSH IDI_APPLICATION

PUSH 0

CALL LoadIconA

MOV [WC.CLSHICON], EAX

;----------- курсор окна

PUSH IDC_CROSS

PUSH 0

CALL LoadCursorA

MOV [WC.CLSHCURSOR], EAX

; ----------

MOV [WC.CLBKGROUND],17 ; цвет окна

MOV DWORD PTR [WC.CLMENUNAME], 0

MOV DWORD PTR [WC.CLNAME], OFFSET CLASSNAME

PUSH OFFSET WC

CALL RegisterClassA

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]