MASM32 >> Painting

Draw Arc


參考資訊:
1. win32
2. tutorial
3. examples_win32

使用方式:


main.asm

    .386
    .model flat,stdcall
    option casemap:none
              
include c:\masm32\include\msvcrt.inc
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\gdi32.inc
include c:\masm32\include\user32.inc
              
includelib c:\masm32\lib\msvcrt.lib
includelib c:\masm32\lib\gdi32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
              
    .data
szCaption   db "main",0
hWin        dd 0
hInstance   dd 0
CommandLine dd 0
defWndProc  dd 0
              
    .code
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    local hdc:dword
    local pen:dword
    local brush:dword
    local ps:PAINTSTRUCT

    .if uMsg == WM_PAINT
        invoke BeginPaint, hWnd, addr ps
        mov hdc, eax
       
        invoke CreatePen, PS_SOLID, 3, 0ffh
        mov pen, eax
        invoke CreateSolidBrush, 0ff00h
        mov brush, eax
    
        invoke SelectObject, hdc, pen
        invoke SelectObject, hdc, brush
        invoke Arc, hdc, 10, 10, 200, 200, 0, 0, 200, 100
      
        invoke EndPaint, hWnd, addr ps
        invoke DeleteObject, pen
        invoke DeleteObject, brush
        xor eax, eax
        ret
    .elseif uMsg == WM_CLOSE
        invoke DestroyWindow, hWnd
        xor eax, eax
        ret
    .elseif uMsg == WM_DESTROY
        invoke PostQuitMessage, 0
        xor eax, eax
        ret
    .endif
            
    invoke CallWindowProc, defWndProc, hWnd, uMsg, wParam, lParam
    ret
WndProc endp
             
WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
    local msg:MSG
              
    invoke CreateWindowEx, WS_EX_LEFT, WC_DIALOG, offset szCaption, 
        WS_OVERLAPPEDWINDOW or WS_VISIBLE, 0, 0, 300, 300, NULL, NULL, NULL, NULL
    mov hWin, eax
             
    invoke SetWindowLong, hWin, GWL_WNDPROC, WndProc
    mov defWndProc, eax
@@:
    invoke GetMessage, addr msg, NULL, 0, 0
    cmp eax, 0
    je @f
    invoke DispatchMessage, addr msg
    jmp @b
@@:
    mov eax, msg.wParam
    ret
WinMain endp
            
start:
    invoke GetModuleHandle, NULL
    mov hInstance, eax
              
    invoke GetCommandLine
    mov CommandLine, eax
              
    invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess, eax
end start

Line 41:畫出一個Arc圖形

Makefile

export WINEPREFIX=/home/user/.wine_amd64

TARGET=main
MYWINE=box86 wine
MASM32=/home/user/.wine_amd64/drive_c/masm32

all:
	${MYWINE} ${MASM32}/bin/ml.exe /c /coff /nologo ${TARGET}.asm
	${MYWINE} ${MASM32}/bin/link.exe /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text ${TARGET}.obj

run:
	${MYWINE} ${TARGET}.exe

clean:
	rm -rf ${TARGET}.exe ${TARGET}.obj

編譯、執行

$ make
$ make run


返回上一頁