📄 on_command.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 + -