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

📄 resed.asm

📁 汇编资源编辑器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.386
.model flat,stdcall
option casemap:none

include ResEd.inc
include Misc.asm
include About.asm
include Opt\MenuOption.asm
include Opt\TabOptions.asm

.code

start:

	invoke GetModuleHandle,NULL
	mov    hInstance,eax
	invoke LoadLibrary,offset szRichEdit
	mov		hRichEd,eax
	invoke ResEdInstall,hInstance
	invoke GridInstall,hInstance
	invoke GetCommandLine
	mov		CommandLine,eax
	;Get command line filename
	invoke PathGetArgs,CommandLine
	mov		CommandLine,eax
  @@:
	mov		dl,[eax]
	.if dl==VK_SPACE
		inc		eax
		jmp		@b
	.elseif dl=='"'
		invoke PathUnquoteSpaces,eax
	.endif
	mov		CommandLine,eax
	invoke InitCommonControls
	;prepare common control structure
	mov		icex.dwSize,sizeof INITCOMMONCONTROLSEX
	mov		icex.dwICC,ICC_DATE_CLASSES or ICC_USEREX_CLASSES or ICC_INTERNET_CLASSES or ICC_ANIMATE_CLASS or ICC_HOTKEY_CLASS or ICC_PAGESCROLLER_CLASS or ICC_COOL_CLASSES
	invoke InitCommonControlsEx,addr icex
	invoke RegCreateKeyEx,HKEY_CURRENT_USER,addr szResEd,0,addr szREG_SZ,0,KEY_WRITE or KEY_READ,0,addr hReg,addr lpdwDisp
	.if lpdwDisp==REG_OPENED_EXISTING_KEY
		mov		lpcbData,sizeof wpos
		invoke RegQueryValueEx,hReg,addr szWinPos,0,addr lpType,addr wpos,addr lpcbData
		.if wpos.wtpro<5
			mov		wpos.wtpro,150
		.endif
		.if wpos.htpro<5
			mov		wpos.htpro,200
		.endif
		mov		lpcbData,sizeof nmeexp
		invoke RegQueryValueEx,hReg,addr szNmeExp,0,addr lpType,addr nmeexp,addr lpcbData
		mov		lpcbData,sizeof grdsize
		invoke RegQueryValueEx,hReg,addr szGrid,0,addr lpType,addr grdsize,addr lpcbData
	.endif
	invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
	invoke RegSetValueEx,hReg,addr szWinPos,0,REG_BINARY,addr wpos,sizeof wpos
	invoke RegCloseKey,hReg
	invoke ResEdUninstall
	.if hRichEd
		invoke FreeLibrary,hRichEd
	.endif
	invoke ExitProcess,eax

SetWinCaption proc lpFileName:DWORD
	LOCAL	buffer[sizeof szAppName+3+MAX_PATH]:BYTE
	LOCAL	buffer1[4]:BYTE

	;Add filename to windows caption
	invoke lstrcpy,addr buffer,offset szAppName
	.if lpFileName
		mov		eax,' - '
		mov		dword ptr buffer1,eax
		invoke lstrcat,addr buffer,addr buffer1
		invoke lstrcat,addr buffer,lpFileName
	.endif
	invoke SetWindowText,hWnd,addr buffer
	ret

SetWinCaption endp

LoadProjectFile proc lpFileName:DWORD
    LOCAL   hFile:DWORD
	LOCAL	hMem:DWORD
	LOCAL	dwRead:DWORD

	;Open the file
	invoke CreateFile,lpFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
	.if eax!=INVALID_HANDLE_VALUE
		mov		hFile,eax
		invoke GetFileSize,hFile,NULL
		push	eax
		inc		eax
		invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,eax
		mov     hMem,eax
		invoke GlobalLock,hMem
		pop		edx
		invoke ReadFile,hFile,hMem,edx,addr dwRead,NULL
		invoke CloseHandle,hFile
		;Copy buffer to ProjectFileName
		invoke lstrcpy,offset ProjectFileName,lpFileName
		invoke SendMessage,hProject,PRO_OPEN,offset ProjectFileName,hMem
		invoke SetWinCaption,offset ProjectFileName
	.else
		invoke MessageBox,hWnd,offset szOpenFileFail,offset szAppName,MB_OK or MB_ICONERROR
		mov		eax,FALSE
	.endif
	ret

LoadProjectFile endp

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
	LOCAL	wc:WNDCLASSEX
	LOCAL	msg:MSG

	mov		wc.cbSize,SIZEOF WNDCLASSEX
	mov		wc.style,CS_HREDRAW or CS_VREDRAW
	mov		wc.lpfnWndProc,OFFSET WndProc
	mov		wc.cbClsExtra,NULL
	mov		wc.cbWndExtra,DLGWINDOWEXTRA
	push	hInst
	pop		wc.hInstance
	mov		wc.hbrBackground,COLOR_BTNFACE+1
	mov		wc.lpszMenuName,10000
	mov		wc.lpszClassName,OFFSET szDlgClass
	invoke LoadIcon,hInst,IDI_ICON
	mov		hIcon,eax
	mov		wc.hIcon,eax
	mov		wc.hIconSm,eax
	invoke LoadCursor,NULL,IDC_ARROW
	mov		wc.hCursor,eax
	invoke RegisterClassEx,addr wc
	invoke CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL
	.if wpos.fMax
		mov		eax,SW_MAXIMIZE
	.else
		mov		eax,SW_SHOWNORMAL
	.endif
	invoke ShowWindow,hWnd,eax
	invoke UpdateWindow,hWnd
	;Get command line filename
	mov		eax,CommandLine
	.if byte ptr [eax]
		invoke LoadProjectFile,eax
	.endif
	.while TRUE
		invoke GetMessage,addr msg,NULL,0,0
	  .BREAK .if !eax
		invoke TranslateAccelerator,hWnd,hAccel,addr msg
		.if !eax
			invoke TranslateMessage,addr msg
			invoke DispatchMessage,addr msg
		.endif
	.endw
	mov		eax,msg.wParam
	ret

WinMain endp

DoToolBar proc hToolBar:HWND
	LOCAL	tbab:TBADDBITMAP

	;Set toolbar struct size
	invoke SendMessage,hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0
	;Set toolbar bitmap
	push	hInstance
	pop		tbab.hInst
	mov		tbab.nID,IDB_TOOLBAR
	invoke SendMessage,hToolBar,TB_ADDBITMAP,9,addr tbab
	;Set toolbar buttons
	invoke SendMessage,hToolBar,TB_ADDBUTTONS,ntbrbtns,addr tbrbtns
	ret

DoToolBar endp

OpenProject proc
	LOCAL	ofn:OPENFILENAME
	LOCAL	buffer[MAX_PATH]:BYTE

	;Zero out the ofn struct
	invoke RtlZeroMemory,addr ofn,sizeof ofn
	;Setup the ofn struct
	mov		ofn.lStructSize,sizeof ofn
	push	hWnd
	pop		ofn.hwndOwner
	push	hInstance
	pop		ofn.hInstance
	mov		ofn.lpstrFilter,offset szRCFilterString
	mov		buffer[0],0
	lea		eax,buffer
	mov		ofn.lpstrFile,eax
	mov		ofn.nMaxFile,sizeof buffer
	mov		ofn.lpstrDefExt,NULL
	mov		ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
	;Show the Open dialog
	invoke GetOpenFileName,addr ofn
	.if eax
		invoke LoadProjectFile,addr buffer
	.endif
	ret

OpenProject endp

SaveProject proc lpFileName:DWORD
	LOCAL	hMem:DWORD
	LOCAL	hFile:DWORD
	LOCAL	nSize:DWORD

	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,256*1024
	mov		hMem,eax
	invoke SendMessage,hProject,PRO_EXPORT,0,hMem
	invoke lstrlen,hMem
	mov		nSize,eax
	invoke CreateFile,lpFileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
	.if eax!=INVALID_HANDLE_VALUE
		mov		hFile,eax
		invoke WriteFile,hFile,hMem,nSize,addr nSize,NULL
		invoke CloseHandle,hFile
		invoke SendMessage,hProject,PRO_SETMODIFY,FALSE,0
		xor		eax,eax
	.endif
	push	eax
	invoke GlobalFree,hMem
	pop		eax
	ret

SaveProject endp

SaveProjectFileAs proc lpFileName:DWORD
	LOCAL	ofn:OPENFILENAME
	LOCAL	buffer[MAX_PATH]:BYTE

	invoke GetWindowLong,hProject,0
	.if eax
		;Zero out the ofn struct
		invoke RtlZeroMemory,addr ofn,sizeof ofn
		;Setup the ofn struct
		mov		ofn.lStructSize,sizeof ofn
		push	hWnd
		pop		ofn.hwndOwner
		push	hInstance
		pop		ofn.hInstance
		mov		ofn.lpstrFilter,offset szRCFilterString
		invoke lstrcpy,addr buffer,lpFileName
		lea		eax,buffer
		mov		ofn.lpstrFile,eax
		mov		ofn.nMaxFile,sizeof buffer
		mov		ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_OVERWRITEPROMPT
		mov		ofn.lpstrDefExt,offset szDefRCExt
		;Show save as dialog
		invoke GetSaveFileName,addr ofn
		.if eax
			invoke SaveProject,addr buffer
			.if !eax
				invoke lstrcpy,offset ProjectFileName,addr buffer
				invoke SetWinCaption,offset ProjectFileName
				invoke lstrlen,offset ProjectFileName
				lea		edx,buffer
				.while byte ptr [edx+eax]!='\' && eax
					dec		eax
				.endw
				mov		byte ptr [edx+eax],0
				lea		edx,[edx+eax+1]
				invoke SendMessage,hProject,PRO_SETNAME,edx,addr buffer
			.endif
		.endif
	.endif
	ret

SaveProjectFileAs endp

SaveProjectFile proc lpFileName:DWORD

	invoke GetWindowLong,hProject,0
	.if eax
		invoke lstrcmp,offset ProjectFileName,offset szNewFile
		.if !eax
			invoke SaveProjectFileAs,lpFileName
		.else
			invoke SaveProject,lpFileName
		.endif
	.endif
	ret

SaveProjectFile endp

WantToSaveProject proc lpFileName:DWORD
	LOCAL	buffer[512]:BYTE
	LOCAL	buffer1[2]:BYTE

	invoke SetFocus,hWnd
	invoke SendMessage,hProject,PRO_GETMODIFY,0,0
	.if eax
		invoke lstrcpy,addr buffer,offset szWannaSave
		invoke lstrcat,addr buffer,lpFileName
		mov		ax,'?'
		mov		word ptr buffer1,ax
		invoke lstrcat,addr buffer,addr buffer1
		invoke MessageBox,hWnd,addr buffer,offset szAppName,MB_YESNOCANCEL or MB_ICONQUESTION
		.if eax==IDYES
			invoke SaveProjectFile,lpFileName
		.elseif eax==IDNO
		    mov		eax,FALSE
		.else
		    mov		eax,TRUE
		.endif
	.endif
	ret

WantToSaveProject endp

Do_ImageList proc phInst:HINSTANCE,pidBmp:DWORD,nSize:DWORD,nImg:DWORD,fMap:DWORD,fBack:DWORD,fFore:DWORD
	LOCAL	lhIml:DWORD
	LOCAL	cm[2]:COLORMAP

	invoke ImageList_Create,nSize,nSize,ILC_COLOR8 or ILC_MASK,nImg,0
	mov		lhIml,eax
	.if	fMap
		mov		cm.From,0FFFFFFh
		mov		eax,fBack
		mov		cm.To,eax
		mov		cm[sizeof COLORMAP].From,0h
		mov		eax,fFore
		mov		cm[sizeof COLORMAP].To,eax
		invoke CreateMappedBitmap,phInst,pidBmp,NULL,addr cm,fMap
	.else
		invoke LoadBitmap,phInst,pidBmp
	.endif
	invoke ImageList_AddMasked,lhIml,eax,fBack
	mov		eax,lhIml
	ret

Do_ImageList endp

ToolBarEnable proc uses ebx,hTbr:HWND

	mov		ebx,hTbr
	invoke SendMessage,hResEd,DEM_CANUNDO,0,0
	invoke SendMessage,ebx,TB_ENABLEBUTTON,IDM_EDIT_UNDO,eax
	invoke SendMessage,hResEd,DEM_ISSELECTION,0,0
	push	eax
	push	eax
	invoke SendMessage,ebx,TB_ENABLEBUTTON,IDM_EDIT_DELETE,eax
	pop		eax
	invoke SendMessage,ebx,TB_ENABLEBUTTON,IDM_EDIT_CUT,eax
	pop		eax
	invoke SendMessage,ebx,TB_ENABLEBUTTON,IDM_EDIT_COPY,eax
	invoke SendMessage,hResEd,DEM_CANPASTE,0,0
	invoke SendMessage,ebx,TB_ENABLEBUTTON,IDM_EDIT_PASTE,eax
	mov		eax,wpos.fView
	and		eax,1
	invoke SendMessage,ebx,TB_CHECKBUTTON,IDM_VIEW_OUTPUT,eax
	ret

ToolBarEnable endp

WndProc proc uses ebx,hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
	LOCAL	hFont:DWORD
	LOCAL	pt:POINT
	LOCAL	rect:RECT
	LOCAL	hMem:DWORD
	LOCAL	nInx:DWORD
	LOCAL	buffer[MAX_PATH]:BYTE
	LOCAL	buffer1[MAX_PATH]:BYTE
	LOCAL	mnu:MENU

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
		push	hWin
		pop		hWnd
		invoke GetModuleFileName,0,addr buffer,sizeof buffer
		invoke lstrlen,addr buffer
		.while byte ptr buffer[eax]!='\' && eax
			dec		eax
		.endw
		mov		buffer[eax],0
		invoke SetCurrentDirectory,addr buffer
		invoke GetDlgItem,hWin,IDC_SBR1
		invoke SendMessage,eax,WM_GETFONT,0,0
		mov		hFont,eax
		invoke MoveWindow,hWin,wpos.x,wpos.y,wpos.wt,wpos.ht,TRUE
		invoke LoadAccelerators,hInstance,IDR_ACCEL
		mov		hAccel,eax
		invoke GetMenu,hWin
		mov		hMnu,eax
		invoke SetToolMenu
		invoke SetHelpMenu
		invoke LoadMenu,hInstance,IDR_CONTEXT
		mov		hContextMenu,eax
		invoke GetSubMenu,eax,0
		mov		hContextMenuPopup,eax
		invoke GetDlgItem,hWin,IDC_TBR1
		invoke DoToolBar,eax
		invoke GetDlgItem,hWin,IDC_EDT1
		mov		hOut,eax
		mov		edx,52300000h
		.if grdsize.show
			or		edx,DES_GRID
		.endif
		.if grdsize.snap
			or		edx,DES_SNAPTOGRID
		.endif
		.if grdsize.tips
			or		edx,DES_TOOLTIP
		.endif
		invoke CreateWindowEx,200h,addr szDlgEditClass,0,edx,0,0,0,0,hWin,IDC_DLGEDIT,hInstance,0
		mov		hResEd,eax
		invoke SendMessage,eax,WM_SETFONT,hFont,0
		invoke CreateWindowEx,200h,addr szProjectClass,0,56000000h,0,0,0,0,hWin,IDC_PROJECT,hInstance,0
		mov		hProject,eax
		invoke SendMessage,eax,WM_SETFONT,hFont,0
		mov		edx,nmeexp.nOutput
		shl		edx,16
		add		edx,nmeexp.nType
		invoke SendMessage,hProject,PRO_SETEXPORT,edx,addr nmeexp.szFileName
		invoke CreateWindowEx,0h,addr szPropertyClass,0,56000000h,0,0,0,0,hWin,IDC_PROPERTY,hInstance,0
		invoke SendMessage,eax,WM_SETFONT,hFont,0
		invoke CreateWindowEx,0h,addr szToolBoxClass,0,56000000h,0,0,0,0,hWin,IDC_TOOLBOX,hInstance,0
		invoke SendMessage,eax,WM_SETFONT,hFont,0
		invoke GetDlgItem,hWin,IDC_SBR1
		invoke SendMessage,hResEd,DEM_SETPOSSTATUS,eax,0
		mov		eax,grdsize.y
		shl		eax,16
		add		eax,grdsize.x
		mov		edx,grdsize.line
		shl		edx,24
		add		edx,grdsize.color
		invoke SendMessage,hResEd,DEM_SETGRIDSIZE,eax,edx
		invoke ImageList_Create,16,16,ILC_COLOR8 or ILC_MASK,2,0
		mov		hIml,eax
		invoke LoadBitmap,hInstance,IDB_ARROW
		push	eax
		invoke ImageList_AddMasked,hIml,eax,0C0C0C0h
		pop		eax
		invoke DeleteObject,eax
		invoke LoadCursor,hInstance,IDC_HSPLIT
		mov		hHSplit,eax
		invoke LoadCursor,hInstance,IDC_VSPLIT
		mov		hVSplit,eax
		invoke GetDlgItem,hWin,IDC_TBR1
		invoke ToolBarEnable,eax
		;Add custom controls
		mov		nInx,1
		mov		ebx,offset hCustDll
		.while nInx<=32
			invoke MakeKey,addr szCust,nInx,addr buffer1
			mov		lpcbData,MAX_PATH
			mov		buffer,0
			invoke RegQueryValueEx,hReg,addr buffer1,0,addr lpType,addr buffer,addr lpcbData
			.if buffer
				invoke SendMessage,hResEd,DEM_ADDCONTROL,0,addr buffer
				.if eax
					mov		[ebx],eax
					add		ebx,4
				.endif
			.endif
			inc		nInx
		.endw
	.elseif eax==WM_NCACTIVATE
		.if hResEd
			invoke GetWindowLong,hResEd,DEWM_DIALOG
			.if eax
				invoke SendMessage,eax,WM_NCACTIVATE,wParam,0
			.endif
		.endif
		jmp		ExDef
	.elseif eax==WM_NCMOUSEMOVE
		invoke GetDlgItem,hWin,IDC_SBR1
		invoke SendMessage,eax,SB_SETTEXT,0,offset szNULL
	.elseif eax==WM_MOUSEMOVE
		invoke GetClientRect,hWin,addr rect
		invoke GetDlgItem,hWin,IDC_SBR1
		invoke SendMessage,eax,SB_SETTEXT,0,offset szNULL
		mov		eax,lParam
		movzx	eax,ax
		cwde
		mov		pt.x,eax
		mov		eax,lParam
		shr		eax,16
		cwde
		mov		pt.y,eax
		invoke GetCapture
		.if eax==hWin
			.if fSize==1
				mov		eax,rect.right
				mov		edx,eax
				sub		edx,80+53
				sub		eax,pt.x
				.if sdword ptr eax<80
					mov		eax,80
				.elseif sdword ptr eax>edx
					mov		eax,edx
				.endif
				.if eax!=wpos.wtpro
					mov		wpos.wtpro,eax
					mov		eax,rect.bottom
					shl		eax,16
					add		eax,rect.right
					invoke SendMessage,hWin,WM_SIZE,0,eax
				.endif
			.elseif fSize==2
				mov		eax,rect.bottom
				mov		edx,eax
				sub		edx,80+25
				mov		eax,pt.y
				sub		eax,25
				.if sdword ptr eax<80-25
					mov		eax,80-25
				.elseif sdword ptr eax>edx
					mov		eax,edx
				.endif
				.if eax!=wpos.htpro
					mov		wpos.htpro,eax
					mov		eax,rect.bottom
					shl		eax,16
					add		eax,rect.right
					invoke SendMessage,hWin,WM_SIZE,0,eax
				.endif
			.elseif fSize==3
				mov		edx,rect.bottom
				sub		edx,80
				mov		eax,pt.y
				.if sdword ptr eax<80
					mov		eax,80
				.elseif sdword ptr eax>edx

⌨️ 快捷键说明

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