Win32asm обучение


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


CmdLine указатель на коммандную строку.

CmdShow это флаг, который определяет, как должно быть показанно окно. (Подробнее об этом, вы можете найти в справочнике API функция ShowWindow).

Теперь мы можем написать наш код инициализации в WinMain:

WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL hwnd:DWORD

ret
WinMain endp

Здесь мы резервируем две локальные переменные, они нам понадобятся в этой процедуре.

.data

ClassName db "FirstWindowClass",0

.code

WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL hwnd:DWORD
; now set all the structure members of the WNDCLASSEX structure wc:
mov  wc.cbSize,SIZEOF WNDCLASSEX
mov  wc.style, CS_HREDRAW or CS_VREDRAW
mov  wc.lpfnWndProc, OFFSET WndProc
mov  wc.cbClsExtra,NULL
mov  wc.cbWndExtra,NULL
push hInst
pop  wc.hInstance
mov  wc.hbrBackground,COLOR_WINDOW
mov  wc.lpszMenuName,NULL
mov  wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov  wc.hIcon, eax
mov  wc.hIconSm, eax
invoke LoadCursor,NULL,IDC_ARROW
mov  wc.hCursor,eax
invoke RegisterClassEx, ADDR wc

ret
WinMain endp

Давайте посмотрим, что получается:

mov  wc.cbSize,SIZEOF WNDCLASSEX
mov  wc.style, CS_HREDRAW or CS_VREDRAW
mov  wc.lpfnWndProc, OFFSET WndProc
mov  wc.cbClsExtra,NULL
mov  wc.cbWndExtra,NULL

Размер структуры инициализирован (это требуется RegisterClassEx). Стиль класса установлен в "CS_HREDRAW or CS_VREDRAW", затем установлен указатель оконной процедуры. Позже вы узнаете, что такое оконная процедура, а сейчас запомните, что вам нужен адрес процедуры WndProc, который вы сможете получить 'offset WndProc'. CbClsExtra и cbWndExtra не используются нами, так что установите их в NULL.

push hInst
pop  wc.hInstance

В wc.hInstance устанавливается хэндл модуля, параметр процедуры WinMain. А почему мы не используем: mov wc.hInstance, hInst? Потому, что команда mov не позволяет перемещать данные из одной ячейки памяти в другую. Здесь мы копируем методом push/pop, значение помещается в стек, а затем извлекается туда, куда нам надо.




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



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