正在学汇编写的第一个窗口,
还是有一点不太懂。
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
Include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
include macro.asm
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
szTitle db "glzaboy",0
szClass db "tensoft",0
main db "这里是main",0
SUI STARTUPINFO<17*4,>
;PI LPPROCESS_INFOMATION <>
.data?
hInstance dd ?
.code
start:
push NULL
mov eax,GetModuleHandle
call eax
mov hInstance,eax
invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
push 0
call ExitProcess
WinMain Proc hinstance:DWORD,hPrevInstance:DWORD,lpCmdLine:DWORD,nShowCmd:DWORD
local wc :WNDCLASSEX
local msg : MSG
local hwnd :HWND
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hinstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszClassName,offset szClass
mov wc.lpszMenuName,NULL
invoke LoadIcon,hinstance,102
mov wc.hIcon,eax
mov wc.hCursor,NULL
mov wc.hIconSm,0
invoke RegisterClassEx, ADDR wc
; invoke CreateWindowEx,NULL,ADDR szClass,offset szTitle,WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hinstance,NULL
invoke CreateWindowEx,NULL,ADDR szClass,CTXT("tenySoft"),WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hinstance,NULL
mov hwnd,eax
invoke ShowWindow,hwnd,SW_NORMAL
invoke UpdateWindow,hwnd
; StartLoop:
; invoke GetMessage,ADDR msg,hwnd,0,0
; cmp eax, 0
; je ExitLoop
; invoke TranslateMessage, ADDR msg
; invoke DispatchMessage, ADDR msg
; jmp StartLoop
; ExitLoop:
.while TRUE
invoke GetMessage,ADDR msg,NULL,0,0
.break .if eax==0
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.endw
ret
WinMain endp
;消息处理
WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg==WM_CREATE
;invoke CreateProcess,CTXT("notepad"),0,0,0,FALSE,0,0,0,offset SUI,offset PI
.elseif uMsg ==WM_QUIT
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
.endif
ret
WndProc endp
end start
编译成功后只有2.5K的大小。