.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