При инициализации окна необходимо описать параметры окна и зарегистрировать его в 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;

§ s tyle — Задает стиль окна. Если использовать стиль как 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 WNDPROCMOV [WC.CLSCEXTRA], 0MOV [WC.CLWNDEXTRA], 0MOV EAX, [HINST]MOV [WC.CLSHINSTANCE], EAX; ---------- иконка окнаPUSH IDI_APPLICATIONPUSH 0CALL LoadIconAMOV [WC.CLSHICON], EAX;----------- курсор окнаPUSH IDC_CROSSPUSH 0CALL LoadCursorAMOV [WC.CLSHCURSOR], EAX; ----------MOV [WC.CLBKGROUND],17; цвет окнаMOV DWORD PTR [WC.CLMENUNAME], 0MOV DWORD PTR [WC.CLNAME], OFFSET CLASSNAMEPUSH OFFSET WCCALL RegisterClassA

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: