參考資訊:
https://masm32.com/board/index.php
https://www.nasm.us/xdoc/2.13rc9/html/nasmdoc0.html
繪畫的顏色設定可以分成Brush、Pen兩種,Brush代表填充的顏色,Pen則是線條的顏色
main.asm
%include "head.asm" segment .text WndProc: push ebp mov ebp, esp cmp dword [ebp + ARG2], WM_PAINT je .handle_paint cmp dword [ebp + ARG2], WM_CLOSE je .handle_close cmp dword [ebp + ARG2], WM_DESTROY je .handle_destroy jmp .handle_default .handle_paint: push ps push dword [ebp + ARG1] call BeginPaint mov [hDC], eax push 0ffh call CreateSolidBrush mov [hBrush], eax push dword [hBrush] lea eax, [ps] add eax, PAINTSTRUCT.rcPaint push eax push dword [hDC] call FillRect push ps push dword [ebp + ARG1] call EndPaint push dword [hBrush] call DeleteObject xor eax, eax jmp .finish .handle_close: push dword [ebp + ARG1] call DestroyWindow xor eax, eax jmp .finish .handle_destroy: push 0 call PostQuitMessage xor eax, eax jmp .finish .handle_default: push dword [ebp + ARG4] push dword [ebp + ARG3] push dword [ebp + ARG2] push dword [ebp + ARG1] push dword [pDefWndProc] call CallWindowProc .finish: leave ret 16 WinMain: push ebp mov ebp, esp push 0 push 0 push 0 push 0 push 300 push 300 push 0 push 0 push WS_OVERLAPPEDWINDOW | WS_VISIBLE push szAppName push WC_DIALOG push WS_EX_LEFT call CreateWindowEx mov [hWin], eax push WndProc push GWL_WNDPROC push dword [hWin] call SetWindowLong mov [pDefWndProc], eax .loop: push 0 push 0 push 0 push msg call GetMessage cmp eax, 0 je .exit push msg call DispatchMessage jmp .loop .exit: mov eax, [msg + MSG.wParam] leave ret 16 _start: push 0 call GetModuleHandle mov [hInstance], eax call GetCommandLine mov [pCommand], eax push SW_SHOWNORMAL push dword [pCommand] push 0 push dword [hInstance] call WinMain push eax call ExitProcess
Line 22~24:產生一個紅色的Brush
Line 26~31:將可視區域填入紅色
Line 37~38:釋放資源
完成