.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 "ThisName", 0 ButtonClass db "BUTTON", 0 HelloWorld db "Hello, World", 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_SYSMENU + WS_VISIBLE, 640, 480, 195, 110, 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_CREATE je CREATE_WIN cmp MESS, WM_DESTROY je DESTROY_WIN cmp MESS, WM_COMMAND je COMMAND_WIN DEFPROC: invoke DefWindowProc, hWnd, MESS, wParam, lParam jmp ENDPROCEDURE CREATE_WIN: invoke CreateWindowEx, 0, addr ButtonClass, addr WindowName, WS_CHILD + WS_VISIBLE + WS_BORDER + BS_PUSHBUTTON, 20, 20, 150, 40, hWnd, 1, hinst, 0 jmp ENDPROCEDURE DESTROY_WIN: invoke PostQuitMessage, 0 jmp ENDPROCEDURE COMMAND_WIN: mov eax, wParam shr eax, 16 cmp eax, BN_CLICKED jne DEFPROC mov eax, wParam and eax, 0FFFFh cmp eax, 1 jne DEFPROC invoke MessageBox, hWnd, addr HelloWorld, addr HelloWorld, MB_OK ENDPROCEDURE: ret 16 WinProc endp END START