Win32 彙編語句模闆
一 變量
;句柄
hInstance dd 0
hWnd dd 0
hPen dd 0
hPend dd 0
oldPen dd 0
;過程變量
hInst :DWORD
hPrevInst :DWORD
hWin:DWORD
hDC:DWORD
hParent:DWORD
hCtl :DWORD
CmdLine :DWORD
CmdShow :DWORD
uMsg :DWORD
wParam :DWORD
lParam :DWORD
a:DWORD
ht:DWORD
ID:DWORD
;本地
LOCAL hDC:DWORD
LOCAL mDC :DWORD
LOCAL hBrush :DWORD
LOCAL hOldBmp :DWORD
LOCAL hReturn :DWORD
LOCAL hOldBrush :DWORD
LOCAL btn_hi :DWORD
LOCAL btn_lo :DWORD
LOCAL rct:RECT
LOCAL ps:PAINTSTRUCT
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
LOCAL Wtx :DWORD
LOCAL var :DWORD
LOCAL buffer1[128]:BYTE ; these are two spare buffers
LOCAL buffer2[128]:BYTE ; for text manipulation etc..
;自定義文本
szText szClassName,"bmbtn_Class"
szText icoMsg1,"Single Icon Button"
szText icoBtnCl,"BUTTON"
szText blnk1,0
szText bmpBtnCl,"BUTTON"
szText bmpMsg1,"Single Bitmap Button"
二 Mov
;句柄mov
mov hInstance,eax
mov hWnd,eax
mov hDC,eax
mov hPen,eax
mov oldPen,eax
mov hIcon, eax
mov hBtn1, eax
mov lpBtnProc, eax
mov hBmp1, eax
mov lpfnbmpProc, eax
mov mDC,eax
mov hOldBrush,eax
mov hReturn,eax
mov hBrush,eax
mov hOldBmp,eax
mov eax,hReturn
;mov到結構體
mov wc.hIcon,eax
mov wc.hCursor, eax
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
mov wc.hInstance, hInst
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
;變量mov
mov eax, wDim
mov Wtx, eax
mov Wwd, 250
mov Wht, 150
mov CommandLine, eax
三 條件語句
;if語句
.if uMsg == WM_COMMAND
.if uMsg == WM_KEYDOWN
.if wParam == 400
;elseif語句
.elseif uMsg == WM_CREATE
.elseif uMsg == WM_PAINT
.elseif uMsg == WM_SIZE
.elseif uMsg == WM_CLOSE
.elseif uMsg == WM_DESTROY
.elseif uMsg == WM_KEYUP
.elseif uMsg == WM_LBUTTONDOWN
.elseif uMsg == WM_LBUTTONUP
.elseif wParam == 401
.endif
四 彙編指令
.386
.code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
return 0
return sDim
return msg.wParam
shr sDim, 1
shr wDim, 1
sub sDim, eax
jmp StartLoop
je ExitLoop
cmp eax,0
xor eax,eax
proc
ret
endp
end start
五 調用Win32 API
;子產品和程序
invoke GetModuleHandle,0
invoke GetModuleHandle, NULL
invoke ExitProcess,eax
invoke GetCommandLine
;視窗
invoke WinMain,hInstance,0,0,SW_SHOWDEFAULT
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
invoke SetWindowLong,hBtn2,GWL_WNDPROC,BtnProc
invoke SetWindowLong,hBtn4,GWL_WNDPROC,bmpProc
invoke SetWindowExtEx,hDC,100,100,0
invoke DefWindowProc,hWin,uMsg,wParam,lParam
invoke RegisterClassEx, ADDR wc
invoke CallWindowProc,lpfnbmpProc,hCtl,uMsg,wParam,lParam
invoke CallWindowProc,lpBtnProc,hCtl,uMsg,wParam,lParam
invoke MessageBox,hWin,ADDR icoMsg1, ADDR szDisplayName,MB_OK
invoke MessageBox,hWin,ADDR bmpMsg1, ADDR szDisplayName,MB_OK
invoke CreateWindowEx,WS_EX_LEFT,
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPED or WS_SYSMENU,
Wtx,Wty,Wwd,Wht,
NULL,NULL,
hInst,NULL
invoke CreateWindowEx,0,
ADDR icoBtnCl,ADDR blnk1,
WS_CHILD or WS_VISIBLE or BS_ICON,
a,b,wd,ht,hParent,ID,
hInstance,NULL
;圖示,位圖,光标,菜單
invoke LoadIcon,hInst,500
invoke LoadIcon,hInstance,2
invoke LoadCursor,0,IDC_ARROW
invoke LoadCursor,NULL,IDC_ARROW
invoke LoadBitmap,hInstance,10
invoke LoadMenu,hInst,600 ; menu ID
invoke SetMenu,hWnd,eax
;系統資訊和度量
invoke GetSystemMetrics,SM_CXSCREEN
invoke GetSystemMetrics,SM_CYSCREEN
invoke GetSysColor,COLOR_BTNHIGHLIGHT
invoke GetSysColor,COLOR_BTNSHADOW
invoke GetSysColor,COLOR_BTNFACE
invoke SetMapMode,hDC,MM_ANISOTROPIC
;消息
invoke GetMessage,ADDR msg,0,0,0
invoke GetMessage,ADDR msg,NULL,0,0
invoke TranslateMessage,ADDR msg
invoke DispatchMessage,ADDR msg
invoke SendMessage,hBtn1,BM_SETIMAGE,1,eax
invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp1
invoke PostQuitMessage,0
;裝置描述表和畫圖
invoke BeginPaint,hWin,ADDR Ps
invoke EndPaint,hWin,ADDR ps
invoke GetClientRect,hWin,ADDR rct
invoke SetViewportExtEx,hDC,rct.right,rct.bottom,0
invoke SelectObject,hDC,hPen
invoke ExtCreatePen,PS_SOLID or PS_GEOMETRIC or PS_ENDCAP_ROUND or PS_JOIN_ROUND,10,ADDR lb,0,0
invoke BeginPath,hDC
invoke MoveToEx,hDC,10,25,0
invoke LineTo,hDC,20,75
invoke EndPath,hDC
invoke CreateCompatibleDC,NULL
invoke SelectObject,mDC,hBitmap
invoke CreateSolidBrush,eax
invoke SelectObject,mDC,hBrush
invoke GetPixel,mDC,1,1
invoke ExtFloodFill,mDC,1,1,eax,FLOODFILLSURFACE
invoke DeleteObject,hBrush
invoke DeleteDC,mDC
六 調用自定義函數
invoke RoundedPath,hDC
invoke IconButton,hWin,20,60,36,36,401
invoke SetBmpColor,hBmp1
invoke TopXY,Wwd,eax
七 标号
start:
StartLoop:
ExitLoop: