.386
.model flat,stdcall
option casemap:none
include \masm32\INCLUDE\windows.INC
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\INCLUDE\advapi32.INC
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\comctl32.lib
.DATA
hinst DWORD 0
hwnd DWORD 0
WindowClass db "Window", 0
WindowName db "Caption", 0
MSG_Handle MSG <0>
.CODE
START:
invoke GetModuleHandle, 0
mov hinst, eax
call Reg_Win_Class
test eax,eax
jz EXIT
invoke CreateWindowEx, 0, addr WindowClass, addr WindowName, \
WS_VISIBLE + WS_SYSMENU, 640, 480, 640, 480, 0, 0, hinst, 0
mov hwnd, eax
invoke ShowWindow, hwnd, 1
invoke UpdateWindow, hwnd
Msg_Loop:
invoke GetMessage, addr MSG_Handle, 0, 0, 0
test eax,eax
jz EXIT
invoke TranslateMessage, addr MSG_Handle
invoke DispatchMessage, addr MSG_Handle
jmp Msg_Loop
EXIT:
invoke ExitProcess, 0
Reg_Win_Class proc
local _WndClassStruct : WNDCLASS
mov _WndClassStruct.style, 0
mov _WndClassStruct.lpfnWndProc, WinProc
mov _WndClassStruct.cbClsExtra, 0
mov _WndClassStruct.cbWndExtra, 0
push hinst
pop _WndClassStruct.hInstance
mov _WndClassStruct.lpszMenuName, 0
mov _WndClassStruct.lpszClassName, offset WindowClass
invoke LoadIcon, 0, 0
mov _WndClassStruct.hIcon, eax
invoke LoadCursor, 0, IDC_ARROW
mov _WndClassStruct.hCursor, eax
invoke CreateSolidBrush, 0ffffffh
mov _WndClassStruct.hbrBackground, eax
invoke RegisterClassA, addr _WndClassStruct
ret
Reg_Win_Class endp
WinProc proc \
uses ebx esi edi hWnd :DWORD, MESS :DWORD, wParam :DWORD, lParam :DWORD
cmp MESS, WM_DESTROY
je DESTROY_WIN
invoke DefWindowProc, hWnd, MESS, wParam, lParam
jmp ENDPROCEDURE
DESTROY_WIN:
invoke PostQuitMessage, 0
ENDPROCEDURE:
ret 16
WinProc endp
END START
Comments