⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 on_command.asm

📁 一个十六进制编辑器源代码,cool!
💻 ASM
字号:
;主窗口的command消息
include fill.asm
include insert.asm
include calc.asm
include process.asm
include insert_fromclipboard.asm
include find.asm
include findfiles.asm
include goto.asm
include conv.asm
include define_block.asm
include assofile.asm
include _readme.asm
OnCommand proto:DWORD ,:DWORD ,:DWORD
_OnCommand macro 
	invoke OnCommand,hWin,wParam,lParam
	endm
.code
OnCommand proc hWin,wParam,lParam
local @szBuf[255]:BYTE 
		mov eax,wParam
		movzx eax,ax
		.if eax==1005;退出				
			invoke SendMessage,hWin,WM_CLOSE ,0,0 
		.elseif eax==1002;新建
			call _GetModify
			.if eax!=IDCANCEL
				invoke DialogBoxParam,hInstance,IDD_NEW,hWin,offset _NewProc,0;ctext("新建")
			.endif
		.elseif eax==1001;打开
			call _GetModify
			.if eax!=IDCANCEL
				invoke _GetOpenFileName,addr @szBuf,hWin
				.if eax
					invoke _OpenFile,eax
				.endif
			.endif
		.elseif eax==IDM_FILE_SAVE;保存
			.if isRam
				invoke OpenProcess,PROCESS_ALL_ACCESS ,FALSE ,dwRamProcessID
				.if eax
					mov wParam,eax
					invoke VirtualProtectEx,wParam,dwRamAddress,dwFileSize,PAGE_READWRITE,addr lParam
					invoke WriteProcessMemory,wParam,dwRamAddress,lpMemFile,dwFileSize,0
					test eax,eax
					pushf
					invoke VirtualProtectEx,wParam,dwRamAddress,dwFileSize,lParam,addr lParam
					invoke CloseHandle,wParam
					popf
					jz @f
					and FLAG_ALL,not FLAG_FILECHANGE
				.else
				@@:
					call _ShowError
				.endif
			.else
				invoke lstrcmp,addr szFileName,addr szNewFile
				test eax,eax
				jz _saveas_
				invoke _SaveFile,addr szFileName
			.endif
		.elseif eax==1004;另存为
_saveas_:
			invoke _GetSaveFileName,addr @szBuf,hWin
			.if eax
				invoke _SaveFile,eax
			.endif
		.elseif eax==1021;撤消
			call _Undo
		.elseif eax==40010;删除			
			mov ebx,dwBlockEnd
			sub ebx,dwBlockStart
			inc ebx
			.if ebx==dwFileSize
				invoke MessageBox,hWin,ctext("不可以删除全部!"),addr szAppName,30h
			.else
				mov eax,lpMemFile
				add eax,dwBlockStart
				invoke _PushUndo,eax,UNDO_DELETE,ebx,NULL 
			.endif
		.elseif eax==40011;插入(和新建用的是同一个对话框)
			invoke DialogBoxParam,hInstance,IDD_NEW,hWin,offset _InsertProc,ctext("插入")
		.elseif eax==40015;从剪切板插入
			invoke DialogBoxParam,hInstance,111,hWin,offset _DlgFromCBProc,0
		.elseif eax==40016;定义块
			invoke DialogBoxParam,hInstance,112,hWin,offset _defineblock,0

		.elseif eax==40012;插入一个字节
			mov eax,lpMemFile
			add eax,dwCurPos
			invoke _PushUndo,eax,UNDO_INSERT,1,0
		.elseif ax==3003 || ax==3000 || ax==3001 || ax==3002 || ax==40003 || ax==40005;复制
			invoke _Copy,eax
		.elseif eax==1033;全选
			mov dwBlockStart,0
			mov eax,dwFileSize
			dec eax
			mov dwBlockEnd,eax
			mov dwCurPos,eax
			call _ReDraw
		.elseif eax==40017
			call _ChangeBlockMode
		.elseif eax==40007;填充
				__createdialog 106,offset _FillProc,g_hDlg_Fill
		.elseif eax==IDM_FIND_GOLINE;转到地址
			__createdialog IDD_GOTO,offset _GotoProc,g_hDlg_GoTo
		.elseif eax==40013;返回前一个地址
			push dwCurPos				
			invoke _SetPos,dwPrePos
			pop dwPrePos
		.elseif eax==IDM_FIND_FIRST;查找
			__createdialog IDD_FIND,offset _FindDlgProc,g_hDlg_Find
		.elseif eax==40006;转换器
			__createdialog 107,offset _DlgConvProc,g_hDlg_Conv
		.elseif eax==40014;计算...
			invoke DialogBoxParam,hInstance,110,hWin,offset _DlgCalcProc,0
		.elseif eax==40020;执行
			invoke ShellExecute,0,0,addr szFileName,0,0,5
		.elseif eax==40018;转到选区
			mov eax,dwBlockStart
			shr eax,4
			mov g_TopLine,eax
			call _Scroll2Visible
		.elseif eax==IDM_VIEW_ONTOP;总在最上
			push ebx
			xor FLAG_ALL,FLAG_ONTOP
			mov eax,MF_CHECKED
			mov ebx,-1
			.if !(FLAG_ALL & FLAG_ONTOP)
				mov eax,MF_UNCHECKED
				dec ebx
			.endif
			invoke CheckMenuItem,hMenu,IDM_VIEW_ONTOP,eax 
			invoke SetWindowPos,hWin,ebx,0,0,0,0,3
			pop ebx
		.elseif eax==40002;数据窗口
			__createdialog 102,offset DlgShowDataProc,g_hDlg_Data
		.elseif eax==40001;文件结构
			__createdialog 103,offset DlgFileStructProc,g_hDlg_Struct
		.elseif eax==40004;运行计算器
			invoke ShellExecute,0,0,ctext("calc.exe"),0,0,SW_SHOW 
		.elseif eax==40008;选择进程
			invoke DialogBoxParam,hInstance,108,hWin,offset DlgProcessProc,0
		.elseif eax==40009;check sum
			__createdialog 109,offset DlgHashProc,g_hDlg_Hash
		.elseif eax==40019;查找文件
			__createdialog 113,offset _FindFilesDlgProc,g_hDlg_FindFile	
		.elseif eax==40023
			call _readme
		.elseif eax>=ID_FIRSTHISMENU;历史菜单(最新文件)
			movzx ebx,ax
			invoke GetMenuString,hMenu,ebx,addr @szBuf,255,MF_BYCOMMAND 
			call _GetModify
			.if eax!=IDCANCEL 
				invoke  _OpenFile,addr @szBuf
			.endif
		.elseif eax==ID_MENU_CLEARHIS;清除历史菜单
			invoke _HisMenuDeleteAll
		.elseif eax==40021
			call _assofile
		.endif
		ret
OnCommand endp

⌨️ 快捷键说明

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