.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include winmm.inc
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib winmm.lib
include macro.asm
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.DATA
szAppName db "HelloWin",0
TestString db "Win32 assembly is great and easy!",0
FontName db "script",0
.DATA?
hInstance dd ?
myBrush HBRUSH ?
.CODE
START:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
invoke ExitProcess,0
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
LOCAL wndclass :WNDCLASSEX
LOCAL msg :MSG
LOCAL hWnd :HWND
LOCAL logbrush :LOGBRUSH
mov logbrush.lbStyle,BS_HATCHED
RGB 57,128,244
mov logbrush.lbColor,eax
mov logbrush.lbHatch,HS_CROSS
invoke CreateBrushIndirect,addr logbrush
mov myBrush,eax
mov wndclass.cbSize,sizeof WNDCLASSEX
mov wndclass.style,CS_HREDRAW or CS_VREDRAW
mov wndclass.lpfnWndProc,offset WndProc
mov wndclass.cbClsExtra,0
mov wndclass.cbWndExtra,0
push hInst
pop wndclass.hInstance
invoke LoadIcon,NULL,IDI_APPLICATION
mov wndclass.hIcon,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wndclass.hCursor,eax
push myBrush
pop wndclass.hbrBackground
mov wndclass.lpszMenuName,NULL
mov wndclass.lpszClassName,offset szAppName
mov wndclass.hIconSm,0
invoke RegisterClassEx, ADDR wndclass
.if (EAX==0)
invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),addr szAppName,MB_ICONERROR
ret
.endif
invoke CreateWindowEx,/
NULL,/
ADDR szAppName,/
CTXT("http://www.aogosoft.com"),/
WS_OVERLAPPEDWINDOW,/
200,/
200,/
400,/
200,/
NULL,/
NULL,/
hInst,/
NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
LOCAL hdc :HDC
LOCAL ps :PAINTSTRUCT
local rect :RECT
LOCAL hfont:HFONT
.if uMsg==WM_CREATE
invoke PlaySound,CTXT("C:/WINDOWS/Media/Windows XP 启动.wav"),NULL, SND_FILENAME or SND_ASYNC
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWin, 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 or FF_SCRIPT,/
ADDR FontName
invoke SelectObject, hdc, eax
mov hfont,eax
RGB 200,200,50
invoke SetTextColor,hdc,eax
RGB 40,100,255
invoke SetBkColor,hdc,eax
; invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString
invoke GetClientRect,hWin,addr rect
invoke DrawText,hdc,CTXT("Hello,Windows XP!"),-1,addr rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
invoke SelectObject,hdc, hfont
invoke EndPaint,hWin, ADDR ps
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
.endif
ret
WndProc endp
END START