Win32asm обучение


Урок 13 - Окна в windows - часть 2


Неинициализированная

UnInitializedstructure SOMESTRUCTURE <>

В первом примере, новая структура создана (Initializedstructure содержит ее смещение), и каждый элемент данных структуры заполнен начальным значением. Второй пример просто говорит masm'у зарезервировать память для структуры, и каждый элемент данных структуры установить в 0. После создания структуры вы можете обращаться к любому ее элементу:

mov eax, Initializedstructure.some_word
; теперь eax будет содержать 10
inc UnInitializedstructure.dword1
; переменная dword1 структуры увеличена на 1

Таблица показывает, как эта структура была бы сохранена в памяти.

Расположение в памятиСодержимое
offset of Initializedstructure100 (dword, 4 байта)
offset of Initializedstructure + 4200 (dword, 4 байта)
offset of Initializedstructure + 810 (word, 2 байта)
offset of Initializedstructure + 1065 or 'A' (1 байт)
offset of Initializedstructure + 1190h (1 байт)

12.3 - WNDCLASSEX

Достаточно о структурах, давайте продолжать RegisterClassEx. В win32 справочнике программиста вы можете найти описание структуры WNDCLASSEX.

typedef struct _WNDCLASSEX { // wc
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX;

Анализ:

cbSizeРазмер структуры WNDCLASSEX в байтах. Вы можете получить этот размер с помощью оператора SIZEOF:
mov ws.cbSize, SIZEOF WNDCLASSEX
styleСтиль окон, создаваемых из это класса.
lpfnWndProcУказатель на процедуру окна (об этом я расскажу ниже)
cbClsExtraКоличество дополнительных байтов, которые нужно зарезервировать (они будут следовать за самой структурой).
cbWndExtraКоличество дополнительных батов, которые нужно зарезервировать (они будут следовать за window instance).
hInstanceХэндл вашей программы. Вы можете получить это хэндл функцией GetModuleHandle.
hIconХэндл иконки. Получите его функцией LoadIcon.
hCursorХэндл курсора. Получите его функцией LoadCursor.
hbrBackgroundХэндл кисти для закрашивания фона, или один из стандартных, таких как COLOR_WINDOW, COLOR_BTNFACE , COLOR_BACKGROUND.
lpszMenuNameУказатель на строку с нулевым символом в конце, которая определяет имя ресурса меню класса. Это также может быть ID ресурса.
lpszClassNameУказатель на строку с нулевым символом в конце, которая определяет имя класса для окон.
hIconSmХэнд маленькой иконки.




- Начало -  - Назад -  - Вперед -



Книжный магазин