Iczelion's Win32 Assembly Tutorial: A Simple Window
format PE GUI 4.0
entry start
include '%fasminc%\win32w.inc'
section '.data' data readable writeable
wTitle TCHAR 'Iczelion Tutorial No.3',0 wClsName TCHAR 'TUT03',0 wMsg MSG
wCls WNDCLASS
wHMain dd ?
wHInstance dd ?
section '.code' code readable executable
start:
invoke GetModuleHandle, NULL
mov [wHInstance], eax
mov [wCls.hInstance], eax
mov [wCls.style], CS_HREDRAW or CS_VREDRAW
mov [wCls.lpfnWndProc], window_procedure
mov [wCls.lpszClassName], wClsName
mov [wCls.hbrBackground], COLOR_WINDOW+1
invoke LoadIcon, NULL, IDI_APPLICATION
mov [wCls.hIcon], eax
invoke LoadCursor, NULL, IDC_ARROW
mov [wCls.hCursor], eax
invoke RegisterClass, wCls
invoke CreateWindowEx,\
0,\
wClsName,\
wTitle,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
[wHInstance],\
NULL
mov [wHMain],eax
invoke ShowWindow, [wHMain], SW_SHOW
window_message_loop_start:
invoke GetMessage, wMsg, NULL, 0, 0
or eax, eax
je window_message_loop_end
invoke TranslateMessage,wMsg
invoke DispatchMessage,wMsg
jmp window_message_loop_start
window_message_loop_end:
invoke ExitProcess, 0
proc window_procedure uses ebx esi edi, hWnd, uMsg, wParam, lParam
cmp [uMsg], WM_DESTROY
je .wmDESTROY
.wmDEFAULT:
invoke DefWindowProc, [hWnd], [uMsg], [wParam], [lParam]
jmp .exit
.wmDESTROY:
invoke PostQuitMessage, 0
.exit:
ret
endp
section '.idata' import data readable writeable
library kernel32, 'KERNEL32.DLL',\
user32, 'USER32.DLL'
include '%fasminc%\api\kernel32.inc'
include '%fasminc%\api\user32.inc'
Последнее обновление : 25 января 2008