📄 graphics.asm
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
ClassName db "WinClass",0
TitleName db "鼠标绘图",0
.data?
hInstance HINSTANCE ?
hp HPEN ?
oldhp HPEN ?
hBrush HBRUSH ?
oldhBrush HBRUSH ?
Rect RECT <>
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, NULL,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
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
mov eax, hInstance
mov wc.hInstance,eax
invoke GetStockObject,WHITE_BRUSH
mov wc.hbrBackground,eax
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_ASTERISK
mov wc.hIcon,eax
mov wc.hIconSm,0
invoke LoadCursor,NULL,IDC_HAND
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
NULL,NULL,hInst,NULL
mov hwnd,eax
invoke ShowWindow,hwnd,CmdShow
invoke UpdateWindow,hwnd
.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
.if uMsg==WM_DESTROY
invoke DeleteObject,hp
invoke DeleteObject,oldhp
invoke DeleteObject,hBrush
invoke DeleteObject,oldhBrush
invoke PostQuitMessage,NULL
.elseif uMsg==WM_PAINT
invoke BeginPaint,hWnd,addr ps
mov hdc,eax
RGB 0FFh,0,0
invoke CreatePen,PS_INSIDEFRAME,2,eax
mov hp,eax
invoke SelectObject,hdc,hp
mov oldhp,eax
RGB 0,0,0ffh
invoke CreateHatchBrush,HS_DIAGCROSS,eax
mov hBrush,eax
invoke SelectObject,hdc,hBrush
mov oldhBrush,eax
invoke Ellipse,hdc, Rect.left,Rect.top,Rect.right,Rect.bottom
invoke SelectObject,hdc,oldhp
invoke SelectObject,hdc,oldhBrush
invoke EndPaint ,hWnd,addr ps
.elseif uMsg==WM_LBUTTONUP
mov eax,lParam
mov edx,eax
movzx eax,ax
mov Rect.right,eax
mov eax,edx
shr eax,16
movzx eax,ax
mov Rect.bottom,eax
invoke InvalidateRect, hWnd,addr Rect,0
.elseif uMsg==WM_LBUTTONDOWN
mov eax,lParam
mov edx,eax
movzx eax,ax
mov Rect.left,eax
mov eax,edx
shr eax,16
movzx eax,ax
mov Rect.top,eax
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -