📄 macro.asm
字号:
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
__SB_SETTEXT macro nPos,lpText
invoke SendMessage,hStatusBar,SB_SETTEXT ,nPos,lpText
endm
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
__SB_SETINT macro nPos,nNum,lpFm
invoke wsprintf,addr szTempBuf,lpFm,nNum
invoke SendMessage,hStatusBar,SB_SETTEXT ,nPos,addr szTempBuf
endm
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
__GetRadio macro nID
invoke SendDlgItemMessage,@hDlg,nID,BM_GETSTATE ,NULL ,NULL
endm
;------------------------------------------------
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
__senddlgmessage macro nID,uMsg,wParam:=<0>,lParam:=<0>
invoke SendDlgItemMessage,@hDlg,nID,uMsg,wParam,lParam
endm
;----------------------------------------------------------
__createdialog macro nID,lpFn,hDialog,p:=<hWnd>
.if !hDialog
invoke CreateDialogParam,hInstance,nID,p,lpFn,0
mov hDialog,eax
.else
invoke ShowWindow,hDialog,SW_SHOW
.endif
endm
__dialogbox macro nID,lpFn,p:=<hWnd>
invoke DialogBoxParam,hInstance,nID,hWin,lpFn,p
endm
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
__alloc macro @size
invoke GlobalAlloc,GPTR,@size
endm
__free macro @lpMem
invoke GlobalFree,@lpMem
endm
__msize macro @lpMem
invoke GlobalSize,@lpMem
endm
__swap_start_end macro
mov eax,dwBlockStart
.if eax>dwBlockEnd
push eax
push dwBlockEnd
pop dwBlockStart
pop dwBlockEnd
.endif
endm
__loopfordebug macro
push eax
mov eax,1
.while eax
.endw
pop eax
endm
__EndDialog macro hDialog
.if hDialog
invoke DestroyWindow,hDialog
.endif
endm
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
_div macro n
xor edx,edx
div n
endm
ctext MACRO y:VARARG ;This is a good macro
LOCAL sym
CONST segment
IFIDNI <y>,<>
sym db 0
ELSE
sym db y,0
ENDIF
CONST ends
EXITM <offset sym>
ENDM
_msgbox macro @lpText,@lpCaption:=<addr szWindowName>,@uType:=<MB_ICONINFORMATION>
invoke MessageBox,hWnd,@lpText,@lpCaption,@uType
endm
;////////////////////////////////////////////////////////////////
;以下没什么实际作用的宏,只是为了在调试时显示结果的方便
lbaddnum macro num ;调试用
push eax
mov eax,num
invoke wsprintf,addr szTempBuf,addr szFm,eax
invoke SendMessage,1224,LB_ADDSTRING ,0,addr szTempBuf
pop eax
endm
lbaddstr macro _str;调试用
push eax
invoke SendMessage,1224,LB_ADDSTRING ,0,_str
pop eax
endm
m2m macro m,n
push n
pop m
endm
msgbox macro @lpText;主要用于调试
push eax
invoke MessageBox,0,@lpText,addr szWindowName,MB_ICONINFORMATION
pop eax
endm
msgbox2 macro n,m;主要用于调试
push eax
invoke MessageBox,0,n,m,MB_ICONINFORMATION
pop eax
endm
showmsg macro
push eax
invoke MessageBox,hWnd,addr szWindowName,addr szWindowName,32
pop eax
endm
shownum macro num,string:=<0>;调试用
local @@szfmshownum
.data?
@@szfmshownum db 255 dup(?)
.data
@@szfm db '%u',13,'%08X',0
.code
pushad
invoke wsprintf,addr @@szfmshownum,addr @@szfm,num,num
invoke MessageBox,0,addr @@szfmshownum,string,0
popad
endm
settext macro num;调试用
push eax
ifb<num>
invoke SetWindowText,hWnd,addr szClassName
else
invoke wsprintf,addr szTempBuf,addr szFmHexD,num
invoke SetWindowText,hWnd,addr szTempBuf
endif
pop eax
endm
setnum macro n1,n2;调试用
push ecx
push eax
invoke wsprintf,addr szTempBuf,addr szFmChar,n1,n2
invoke SetWindowText,hWnd,addr szTempBuf
pop eax
pop ecx
endm
;;;;;;;;;;;;;;;;;;;
;一些数学宏
__max2 macro n,m
mov eax,n
.if eax<m
mov eax,m
.endif
exitm<eax>
endm
__min2 macro n,m
mov eax,n
.if eax>m
mov eax,m
.endif
exitm<eax>
endm
__abs2 macro n,m
mov eax,n
sub eax,m
.if sdword ptr eax <0
neg eax
.endif
exitm<eax>
endm
__add2 macro n,m
mov eax,n
add eax,m
exitm<eax>
endm
__sub2 macro n,m
mov eax,n
sub eax,m
exitm<eax>
endm
__hiword macro n
mov eax,n
shr eax,16
exitm<eax>
endm
__loword macro n
mov eax,n
movzx eax,ax
exitm<eax>
endm
__lowbyte macro n
mov eax,n
movzx eax,al
exitm<eax>
endm
__and macro n,m
mov eax,n
and eax,m
exitm<eax>
endm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -