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

📄 project.asm

📁 汇编资源编辑器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.data

szDialog		db 'Dialog',0
szMenu			db 'Menu',0
szMisc			db 'Misc',0

szResource		db 'Resource',0
szIncludeFile	db 'Include file',0
szStringTable	db 'Stringtable',0

.data?

hPrjTrv			dd ?
OldTreeViewProc	dd ?
hRoot			dd ?
hNodeDlg		dd ?
hNodeMnu		dd ?
hNodeMisc		dd ?

.code

ProjectDblClick proc hWin:HWND,lParam:LPARAM
	LOCAL	buffer[64]:BYTE
	LOCAL	tvht:TV_HITTESTINFO
	LOCAL	tvi:TV_ITEMEX
	LOCAL	hTvi:HWND

	mov		eax,lParam
	and		eax,0FFFFh
	mov		tvht.pt.x,eax
	mov		eax,lParam
	shr		eax,16
	mov		tvht.pt.y,eax
	invoke SendMessage,hWin,TVM_HITTEST,0,addr tvht
	.if eax
		mov		hTvi,eax
		mov		eax,tvht.flags
		and		eax,TVHT_ONITEM
		.if eax
			m2m		tvi.hItem,tvht.hItem
			mov		tvi.imask,TVIF_PARAM or TVIF_TEXT
			lea		eax,buffer
			mov		tvi.pszText,eax
			mov		tvi.cchTextMax,sizeof buffer
			invoke SendMessage,hWin,TVM_GETITEM,0,addr tvi
			.if tvi.lParam
				mov		eax,tvi.lParam
				.if [eax].PROJECT.ntype==TPE_DIALOG
					invoke SendMessage,hDEd,DEM_OPEN,0,eax
				.elseif [eax].PROJECT.ntype==TPE_MENU
					invoke SendMessage,hDEd,MEM_OPEN,0,eax
				.elseif [eax].PROJECT.ntype==TPE_VERSION
					invoke DialogBoxParam,hInstance,IDD_DLGVERSION,hWin,offset VersionEditProc,eax
				.elseif [eax].PROJECT.ntype==TPE_ACCEL
					invoke DialogBoxParam,hInstance,IDD_DLGACCEL,hWin,offset AccelEditProc,eax
				.elseif [eax].PROJECT.ntype==TPE_INCLUDE
					invoke DialogBoxParam,hInstance,IDD_DLGINCLUDE,hWin,offset IncludeEditProc,eax
				.elseif [eax].PROJECT.ntype==TPE_RESOURCE
					invoke DialogBoxParam,hInstance,IDD_DLGRESOURCE,hWin,offset ResourceEditProc,eax
				.elseif [eax].PROJECT.ntype==TPE_STRING
					invoke DialogBoxParam,hInstance,IDD_DLGSTRING,hWin,offset StringEditProc,eax
				.endif
			.endif
		.endif
	.endif
	ret

ProjectDblClick endp

TreeViewProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax==WM_LBUTTONDBLCLK
		invoke ProjectDblClick,hWin,lParam
	.endif
	invoke CallWindowProc,OldTreeViewProc,hWin,uMsg,wParam,lParam
	ret

TreeViewProc endp

Do_Project proc hWin:HWND

	invoke CreateWindowEx,0,addr szTreeViewClass,NULL,WS_CHILD or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or TVS_HASLINES or TVS_HASBUTTONS or TVS_SHOWSELALWAYS,0,0,0,0,hWin,0,hInstance,0
	mov		hPrjTrv,eax
	invoke SetWindowLong,hPrjTrv,GWL_WNDPROC,offset TreeViewProc
	mov		OldTreeViewProc,eax
	invoke SendMessage,hPrjTrv,TVM_SETIMAGELIST,0,hPrjIml
	ret

Do_Project endp

ProjectSize proc ccx:DWORD,ccy:DWORD

	invoke MoveWindow,hPrjTrv,0,0,ccx,ccy,TRUE
	ret

ProjectSize endp

Do_TreeViewAddNode proc hWin:HWND,lhPar:DWORD,lhInsAfter:DWORD,pszText:DWORD,pidSel:DWORD,pidNosel:DWORD,lParam:LPARAM
	LOCAL   tvins:TV_INSERTSTRUCT

	m2m		tvins.hParent,lhPar
	m2m		tvins.hInsertAfter,lhInsAfter
	m2m		tvins.item.lParam,lParam
	mov		tvins.item._mask,TVIF_TEXT or TVIF_IMAGE or TVIF_SELECTEDIMAGE or TVIF_PARAM
	m2m		tvins.item.pszText,pszText
	m2m		tvins.item.iImage,pidSel
	m2m		tvins.item.iSelectedImage,pidNosel
	invoke SendMessage,hWin,TVM_INSERTITEM,0,addr tvins
	ret

Do_TreeViewAddNode endp

AddProjectNode proc nType:DWORD,lpName:DWORD,lParam:DWORD

	mov		eax,nType
	.if eax==TPE_DIALOG
		.if !hNodeDlg
			invoke Do_TreeViewAddNode,hPrjTrv,hRoot,TVI_SORT,offset szDialog,0,0,0
			mov		hNodeDlg,eax
		.endif
		invoke Do_TreeViewAddNode,hPrjTrv,hNodeDlg,TVI_SORT,lpName,1,1,lParam
	.elseif eax==TPE_MENU
		.if !hNodeMnu
			invoke Do_TreeViewAddNode,hPrjTrv,hRoot,TVI_SORT,offset szMenu,0,0,0
			mov		hNodeMnu,eax
		.endif
		invoke Do_TreeViewAddNode,hPrjTrv,hNodeMnu,TVI_SORT,lpName,2,2,lParam
	.elseif eax==TPE_INCLUDE || eax==TPE_ACCEL || eax==TPE_VERSION || eax==TPE_RESOURCE || eax==TPE_STRING
		.if !hNodeMisc
			invoke Do_TreeViewAddNode,hPrjTrv,hRoot,TVI_SORT,offset szMisc,0,0,0
			mov		hNodeMisc,eax
		.endif
		mov		eax,nType
		.if eax==TPE_RESOURCE
			mov		eax,3
		.elseif eax==TPE_ACCEL
			mov		eax,4
		.elseif eax==TPE_VERSION
			mov		eax,5
		.elseif eax==TPE_STRING
			mov		eax,6
		.else
			mov		eax,7
		.endif
		invoke Do_TreeViewAddNode,hPrjTrv,hNodeMisc,TVI_SORT,lpName,eax,eax,lParam
	.endif
	ret

AddProjectNode endp

ExpandProjectNodes proc hNode:DWORD

	invoke SendMessage,hPrjTrv,TVM_EXPAND,TVE_EXPAND,hRoot
	.if hNodeDlg
		mov		eax,hNode
		.if eax==hNodeDlg || !eax
			invoke SendMessage,hPrjTrv,TVM_EXPAND,TVE_EXPAND,hNodeDlg
		.endif
	.endif
	.if hNodeMnu
		mov		eax,hNode
		.if eax==hNodeMnu || !eax
			invoke SendMessage,hPrjTrv,TVM_EXPAND,TVE_EXPAND,hNodeMnu
		.endif
	.endif
	.if hNodeMisc
		mov		eax,hNode
		.if eax==hNodeMisc || !eax
			invoke SendMessage,hPrjTrv,TVM_EXPAND,TVE_EXPAND,hNodeMisc
		.endif
	.endif
	ret

ExpandProjectNodes endp

OpenProject proc uses esi,lpFileName:DWORD,hRCMem:DWORD
	LOCAL	hProMem:DWORD
	LOCAL	buffer[16]:BYTE

	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,16384
	mov     hProMem,eax
	invoke GlobalLock,hProMem
	invoke AddTypeMem,hProMem,64*1024,TPE_NAME
	invoke ParseRCMem,hRCMem,hProMem
	invoke GlobalUnlock,hRCMem
	invoke GlobalFree,hRCMem
	invoke lstrlen,lpFileName
	mov		edx,lpFileName
	.while byte ptr [edx+eax]!='\' && eax
		dec		eax
	.endw
	.if byte ptr [edx+eax]=='\'
		inc		eax
	.endif
	lea		edx,[edx+eax]
	push	edx
	invoke lstrcpyn,offset szProjectPath,lpFileName,eax
	invoke SetCurrentDirectory,offset szProjectPath
	pop		edx
	mov		esi,hProMem
	invoke Do_TreeViewAddNode,hPrjTrv,TVI_ROOT,TVI_FIRST,edx,0,0,esi
	mov		hRoot,eax
	.while [esi].PROJECT.hmem
		.if [esi].PROJECT.ntype==TPE_DIALOG
			mov		eax,[esi].PROJECT.hmem
			lea		edx,[eax+sizeof DLGHEAD].DIALOG.idname
			.if !byte ptr [edx]
				lea		edx,buffer
				invoke ResEdBinToDec,[eax+sizeof DLGHEAD].DIALOG.id,edx
				lea		edx,buffer
			.endif
			invoke AddProjectNode,TPE_DIALOG,edx,esi
		.elseif [esi].PROJECT.ntype==TPE_MENU
			mov		eax,[esi].PROJECT.hmem
			lea		edx,[eax].MNUHEAD.menuname
			.if !byte ptr [edx]
				lea		edx,buffer
				invoke ResEdBinToDec,[eax].MNUHEAD.menuid,edx
				lea		edx,buffer
			.endif
			invoke AddProjectNode,TPE_MENU,edx,esi
		.elseif [esi].PROJECT.ntype==TPE_INCLUDE
			invoke AddProjectNode,TPE_INCLUDE,offset szIncludeFile,esi
		.elseif [esi].PROJECT.ntype==TPE_ACCEL
			mov		eax,[esi].PROJECT.hmem
			lea		edx,[eax].ACCELMEM.szname
			.if !byte ptr [edx]
				lea		edx,buffer
				invoke ResEdBinToDec,[eax].ACCELMEM.value,edx
				lea		edx,buffer
			.endif
			invoke AddProjectNode,TPE_ACCEL,edx,esi
		.elseif [esi].PROJECT.ntype==TPE_VERSION
			mov		eax,[esi].PROJECT.hmem
			lea		edx,[eax].VERSIONMEM.szname
			.if !byte ptr [edx]
				lea		edx,buffer
				invoke ResEdBinToDec,[eax].VERSIONMEM.value,edx
				lea		edx,buffer
			.endif
			invoke AddProjectNode,TPE_VERSION,edx,esi
		.elseif [esi].PROJECT.ntype==TPE_RESOURCE
			invoke AddProjectNode,TPE_RESOURCE,offset szResource,esi
		.elseif [esi].PROJECT.ntype==TPE_STRING
			invoke AddProjectNode,TPE_STRING,offset szStringTable,esi
		.endif
		add		esi,sizeof PROJECT
	.endw
	invoke ExpandProjectNodes,NULL
	mov		eax,hProMem
	ret

OpenProject endp

CloseProject proc uses esi,hProMem:DWORD

	invoke GetWindowLong,hDEd,DEWM_DIALOG
	.if eax
		push	eax
		invoke DestroySizeingRect
		pop		eax
		invoke DestroyWindow,eax
	.endif
	invoke SetWindowLong,hDEd,DEWM_DIALOG,0
	invoke SetWindowLong,hDEd,DEWM_MEMORY,0
	.if hRoot
		invoke SendMessage,hPrjTrv,TVM_DELETEITEM,0,TVI_ROOT
		mov		hRoot,0
		mov		hNodeDlg,0
		mov		hNodeMnu,0
		mov		hNodeMisc,0
	.endif
	mov		esi,hProMem
	.if esi
		.while [esi].PROJECT.hmem
			invoke GlobalUnlock,[esi].PROJECT.hmem
			invoke GlobalFree,[esi].PROJECT.hmem
			mov		[esi].PROJECT.hmem,0
			add		esi,sizeof PROJECT
		.endw
		invoke GlobalUnlock,hProMem
		invoke GlobalFree,hProMem
		mov		hProMem,0
	.endif
	ret

CloseProject endp

ExportProject proc lpRCMem:DWORD,lpProMem:DWORD
	LOCAL	hMem:DWORD

	mov		esi,lpProMem
	.while [esi].PROJECT.hmem
		.if ![esi].PROJECT.delete
			.if [esi].PROJECT.ntype==TPE_NAME
				mov		eax,[esi].PROJECT.hmem
				invoke ExportNamesNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_DIALOG
				mov		eax,[esi].PROJECT.hmem
				invoke ExportDialogNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_MENU
				mov		eax,[esi].PROJECT.hmem
				invoke ExportMenuNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_VERSION
				mov		eax,[esi].PROJECT.hmem
				invoke ExportVersionNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_ACCEL
				mov		eax,[esi].PROJECT.hmem
				invoke ExportAccelNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
;			.elseif [esi].PROJECT.ntype==TPE_INCLUDE
;				mov		eax,[esi].PROJECT.hmem
;				invoke ExportInclude,eax
;				.if eax
;					mov		hMem,eax
;					invoke lstrcat,lpRCMem,hMem
;					invoke GlobalUnlock,hMem
;					invoke GlobalFree,hMem
;				.endif
			.elseif [esi].PROJECT.ntype==TPE_RESOURCE
				mov		eax,[esi].PROJECT.hmem
				invoke ExportResourceNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_STRING
				mov		eax,[esi].PROJECT.hmem
				invoke ExportStringNames,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.endif
		.endif
		add		esi,sizeof PROJECT
	.endw
	mov		esi,lpProMem
	.while [esi].PROJECT.hmem
		.if ![esi].PROJECT.delete
			.if [esi].PROJECT.ntype==TPE_DIALOG
				mov		eax,[esi].PROJECT.hmem
				invoke ExportDialog,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_MENU
				mov		eax,[esi].PROJECT.hmem
				invoke ExportMenu,eax
				.if eax
					mov		hMem,eax
					invoke lstrcat,lpRCMem,hMem
					invoke GlobalUnlock,hMem
					invoke GlobalFree,hMem
				.endif
			.elseif [esi].PROJECT.ntype==TPE_VERSION
				mov		eax,[esi].PROJECT.hmem
				invoke ExportVersion,eax
				.if eax
					mov		hMem,eax

⌨️ 快捷键说明

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