conv.asm

来自「一个十六进制编辑器源代码,cool!」· 汇编 代码 · 共 66 行

ASM
66
字号
include dw2bin.asm
include str2ascii.asm
_DlgConvProc proto :DWORD,:DWORD,:DWORD,:DWORD
_CopyDataTo	proto:DWORD ,:DWORD ,:DWORD 
.data
	szConvType db 'Hex->DWORD',0
				db	'Hex->Bin',0
				db 'DWORD->Hex',0
				db 'DWORD->Bin',0
				db 'Str->Ascii',0
				db	0

.CODE
_DlgConvProc proc uses edi @hDlg,uMsg,wParam,lParam
local @szBuf[50]:BYTE ,@szBufAsc[200]:BYTE 
	mov eax,uMsg
	.if eax==WM_INITDIALOG 
		lea edi,szConvType
		.while BYTE ptr [edi]
			__senddlgmessage 1006,CB_ADDSTRING ,0,edi
			invoke lstrlen,edi
			add edi,eax
			inc edi
		.endw
		__senddlgmessage 1006,CB_SETCURSEL 
	.elseif eax==WM_COMMAND 
		mov eax,wParam
		mov edi,eax
		shr eax,16
		.if ax==CBN_SELCHANGE || (ax==EN_CHANGE && di==1000)				
			lea edi,@szBuf
			__senddlgmessage 1006,CB_GETCURSEL 
			.if eax==0
				invoke GetDlgItemText,@hDlg,1000,edi,50
				invoke H2DW,edi
				invoke SetDlgItemInt,@hDlg,1001,eax,TRUE
			.elseif eax==1
				invoke GetDlgItemText,@hDlg,1000,edi,50
				invoke H2DW,edi
				invoke dw2bin,eax,edi
				invoke SetDlgItemText,@hDlg,1001,edi
			.elseif eax==2
				invoke GetDlgItemInt,@hDlg,1000,0,TRUE 
				invoke wsprintf,edi,addr szFmHexD,eax
				invoke SetDlgItemText,@hDlg,1001,edi
			.elseif eax==3
				invoke GetDlgItemInt,@hDlg,1000,0,TRUE 
				invoke dw2bin,eax,edi
				invoke SetDlgItemText,@hDlg,1001,edi
			.elseif eax==4
				invoke GetDlgItemText,@hDlg,1000,edi,50
				mov @szBufAsc,0
				invoke str2ascii,edi,addr @szBufAsc
				invoke SetDlgItemText,@hDlg,1001,addr @szBufAsc 
			.endif
		.endif		
	.elseif eax==WM_CLOSE 
		invoke ShowWindow,@hDlg,SW_HIDE 
	.else
		xor eax,eax
		ret
	.endif
	mov eax,TRUE
	ret
_DlgConvProc endp

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?