Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .586
- .model flat,stdcall
- option casemap:none
- include \masm32\include\windows.inc
- include \masm32\include\user32.inc
- include \masm32\include\kernel32.inc
- include \masm32\include\comctl32.inc
- include \masm32\include\gdi32.inc
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\kernel32.lib
- includelib \masm32\lib\comctl32.lib
- includelib \masm32\lib\gdi32.lib
- include \masm32\include\masm32.inc ;for dwtoa function
- include \masm32\macros\macros.asm ;for rv() macro
- includelib \masm32\lib\masm32.lib
- WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
- RGB macro red,green,blue ;used for TextOut function
- xor eax,eax
- mov ah,blue
- shl eax,8
- mov ah,green
- mov al,red
- endm
- .data
- ClassName db "WinClassName",0
- AppName db "WinAppName",0
- Hello_txt db "Hello there!",0
- .data?
- hInstance HINSTANCE ?
- buffer db 128 dup(?)
- .const
- Scr_Width equ 1024
- Scr_Height equ 640
- .code
- start:
- invoke GetModuleHandle,NULL
- mov hInstance,eax
- invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
- invoke ExitProcess,eax
- WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
- LOCAL wc:WNDCLASSEX
- LOCAL msg:MSG
- LOCAL hwnd:HWND
- LOCAL rc:RECT
- 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
- RGB 0,0,0
- invoke CreateSolidBrush,eax
- mov wc.hbrBackground,eax
- 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
- mov rc.left,0
- mov rc.top,0
- mov rc.right,Scr_Width
- mov rc.bottom,Scr_Height
- invoke GetSystemMetrics,SM_CXFIXEDFRAME
- shl eax,1
- add rc.right,eax
- invoke GetSystemMetrics,SM_CYFIXEDFRAME
- shl eax,1
- add rc.bottom,eax
- invoke GetSystemMetrics,SM_CYCAPTION
- add rc.bottom,eax
- invoke GetSystemMetrics,SM_CXSCREEN
- sub eax,Scr_Width
- shr eax,1
- mov rc.left,eax
- invoke GetSystemMetrics,SM_CYSCREEN
- sub eax,Scr_Height
- shr eax,1
- mov rc.top,eax
- invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,WS_VISIBLE+WS_SYSMENU+WS_DLGFRAME+WS_MINIMIZEBOX+WS_MAXIMIZEBOX,rc.left,rc.top,rc.right,rc.bottom,NULL,NULL,hInst,NULL
- mov hwnd,eax
- .WHILE TRUE
- invoke GetMessage,ADDR msg,NULL,0,0
- .BREAK .IF(!eax)
- invoke TranslateMessage,ADDR msg
- invoke DispatchMessage,ADDR msg
- .ENDW
- mov eax,msg.wParam
- ret
- WinMain endp
- WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
- LOCAL hdc:HDC
- LOCAL ps:PAINTSTRUCT
- LOCAL hfont:HFONT
- .if uMsg==WM_PAINT
- invoke BeginPaint,hWnd,ADDR ps
- mov hdc,eax
- invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,NULL
- invoke SelectObject,hdc,eax
- mov hfont,eax
- RGB 255,255,255
- invoke SetTextColor,hdc,eax
- RGB 0,0,0
- invoke SetBkColor,hdc,BLACK_BRUSH
- invoke TextOut,hdc,450,300,ADDR Hello_txt,len(ADDR Hello_txt)
- mov eax,12345
- invoke dwtoa,eax,ADDR buffer
- invoke TextOut,hdc,450,350,ADDR buffer,len(ADDR buffer)
- invoke EndPaint,hWnd,ADDR ps
- .elseif uMsg==WM_CREATE ;used to create edit controls, buttons, etc.
- invoke InvalidateRect,hWnd,NULL,TRUE
- invoke UpdateWindow,hWnd
- .elseif uMsg==WM_COMMAND ;used to process menu commands
- .elseif uMsg==WM_CHAR ;used to handle keyboard input
- .elseif uMsg==WM_DESTROY
- invoke PostQuitMessage,NULL
- .else
- invoke DefWindowProc,hWnd,uMsg,wParam,lParam
- ret
- .endif
- xor eax,eax
- ret
- WndProc endp
- end start
Add Comment
Please, Sign In to add comment