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

📄 property.asm

📁 汇编资源编辑器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
					dd -1,0
					dd -1 xor (DS_CENTER or DS_CENTERMOUSE),DS_CENTERMOUSE
					dd -1,0
OriePgb				db 'Horizontal,Vertical',0
					dd -1 xor PBS_VERTICAL,0
					dd -1,0
					dd -1 xor PBS_VERTICAL,PBS_VERTICAL
					dd -1,0
OrieUdn				db 'Vertical,Horizontal',0
					dd -1 xor UDS_HORZ,0
					dd -1,0
					dd -1 xor UDS_HORZ,UDS_HORZ
					dd -1,0
SortLsv				db 'None,Ascending,Descending',0
					dd -1 xor (LVS_SORTASCENDING or LVS_SORTDESCENDING),0
					dd -1,0
					dd -1 xor (LVS_SORTASCENDING or LVS_SORTDESCENDING),LVS_SORTASCENDING
					dd -1,0
					dd -1 xor (LVS_SORTASCENDING or LVS_SORTDESCENDING),LVS_SORTDESCENDING
					dd -1,0
OwneCbo				db 'None,Fixed,Variable',0
					dd -1 xor (CBS_OWNERDRAWFIXED or CBS_OWNERDRAWVARIABLE),0
					dd -1,0
					dd -1 xor (CBS_OWNERDRAWFIXED or CBS_OWNERDRAWVARIABLE),CBS_OWNERDRAWFIXED
					dd -1,0
					dd -1 xor (CBS_OWNERDRAWFIXED or CBS_OWNERDRAWVARIABLE),CBS_OWNERDRAWVARIABLE
					dd -1,0

szPropErr			db 'Invalid property value.',0
szStyleWarn			db 'WARNING!!',0Dh,'Some styles can make dialog editor unstable. Save before use.',0
StyleEx				dd 0
StyleOfs			dd 0
StyleTxt			dd 0
StylePos			dd 0
szStyleExTxt		db ',,,,'
					db ',,,,'
					db ',,,,'
					db ',WS_EX_APPWINDOW,WS_EX_STATICEDGE,WS_EX_CONTROLPARENT,'
					db ',WS_EX_LEFTSCROLLBAR,WS_EX_RTLREADING,WS_EX_RIGHT,'
					db ',WS_EX_CONTEXTHELP,WS_EX_CLIENTEDGE,WS_EX_WINDOWEDGE,'
					db 'WS_EX_TOOLWINDOW,WS_EX_MDICHILD,WS_EX_TRANSPARENT,WS_EX_ACCEPTFILES,'
					db 'WS_EX_TOPMOST,WS_EX_NOPARENTNOTIFY,,WS_EX_DLGMODALFRAME',0
szStyleTxt			db 'WS_POPUP,WS_CHILD,WS_MINIMIZE,WS_VISIBLE,'
					db 'WS_DISABLED,WS_CLIPSIBLINGS,WS_CLIPCHILDREN,WS_MAXIMIZE,'
					db 'WS_BORDER,WS_DLGFRAME,WS_VSCROLL,WS_HSCROLL,'
					db 'WS_SYSMENU,WS_THICKFRAME,WS_GROUP,WS_TABSTOP',0

.data?

lbtxtbuffer			db 4096 dup(?)
szLbString			db 64 dup(?)
hPrpCboDlg			dd ?
OldPrpCboDlgProc	dd ?
hPrpLstDlg			dd ?
OldPrpLstDlgProc	dd ?
hPrpEdtDlgCld		dd ?
OldPrpEdtDlgCldProc	dd ?
hPrpLstDlgCld		dd ?
OldPrpLstDlgCldProc	dd ?
hPrpBtnDlgCld		dd ?
OldPrpBtnDlgCldProc	dd ?

tempbuff			db 256 dup(?)

.code

PropertyStyleTxt proc hWin:HWND,lpBuff:DWORD
	LOCAL	buffer[1024]:BYTE
	LOCAL	buffer1[64]:BYTE

	mov		eax,StyleOfs
	.if StyleEx
		push	eax
		invoke lstrcpy,addr buffer,addr szStyleExTxt
		pop		eax
		mov		eax,(DIALOG ptr [eax]).exstyle
	.else
		push	eax
		invoke lstrcpy,addr buffer,addr szStyleTxt
		pop		eax
		mov		eax,(DIALOG ptr [eax]).style
	.endif
	mov		ecx,32
	mov		edx,lpBuff
	.while ecx
		mov		byte ptr [edx],'0'
		shl		eax,1
		jnc		@f
		mov		byte ptr [edx],'1'
	  @@:
		inc		edx
		dec		ecx
	.endw
	mov		byte ptr [edx],0
	invoke SetDlgItemText,hWin,IDC_EDTSTYLE,lpBuff
	mov		eax,StylePos
	inc		eax
	invoke SendDlgItemMessage,hWin,IDC_EDTSTYLE,EM_SETSEL,StylePos,eax
	mov		eax,StylePos
	inc		eax
	.while eax
		push	eax
		invoke GetStrItem,addr buffer,addr buffer1
		pop		eax
		dec		eax
	.endw
	invoke SetDlgItemText,hWin,IDC_STCTXT,addr buffer1
	ret

PropertyStyleTxt endp

PropertyDlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
	LOCAL	buffer[33]:BYTE
	LOCAL	hCtl:HWND
	LOCAL	rect:RECT
	LOCAL	prect:RECT

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
		mov		StylePos,0
		invoke GetWindowRect,hPrpLstDlg,addr prect
		invoke GetWindowRect,hWin,addr rect
		;width
		mov		eax,rect.left
		sub		rect.right,eax
		;height
		mov		eax,rect.top
		sub		rect.bottom,eax
		;left
		mov		eax,prect.right
		sub		eax,rect.right		;width
		jnc		@f
		xor		eax,eax
	  @@:
		mov		rect.left,eax
		;Top
		mov		eax,rect.top
		sub		eax,95
		jnc		@f
		xor		eax,eax
	  @@:
		mov		rect.top,eax
		invoke MoveWindow,hWin,rect.left,rect.top,rect.right,rect.bottom,TRUE
		invoke SendMessage,hWin,WM_SETTEXT,0,StyleTxt
		invoke SetDlgItemText,hWin,IDC_STCWARN,addr szStyleWarn
		invoke PropertyStyleTxt,hWin,addr buffer
		invoke GetDlgItem,hWin,IDC_BTNLEFT
		mov		hCtl,eax
		invoke ImageList_GetIcon,hMnuIml,0,ILD_NORMAL
		invoke SendMessage,hCtl,BM_SETIMAGE,IMAGE_ICON,eax
		invoke GetDlgItem,hWin,IDC_BTNRIGHT
		mov		hCtl,eax
		invoke ImageList_GetIcon,hMnuIml,1,ILD_NORMAL
		invoke SendMessage,hCtl,BM_SETIMAGE,IMAGE_ICON,eax
		invoke GetDlgItem,hWin,IDC_BTNSET
		mov		hCtl,eax
		invoke ImageList_GetIcon,hMnuIml,2,ILD_NORMAL
		invoke SendMessage,hCtl,BM_SETIMAGE,IMAGE_ICON,eax
	.elseif eax==WM_COMMAND
		mov		eax,wParam
		mov		edx,eax
		shr		edx,16
		and		eax,0FFFFh
		.if edx==BN_CLICKED
			.if eax==IDCANCEL
				invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
			.elseif eax==IDC_BTNLEFT
				dec		StylePos
				and		StylePos,31
				mov		eax,StylePos
				inc		eax
				invoke SendDlgItemMessage,hWin,IDC_EDTSTYLE,EM_SETSEL,StylePos,eax
				invoke PropertyStyleTxt,hWin,addr buffer
			.elseif eax==IDC_BTNRIGHT
				inc		StylePos
				and		StylePos,31
				mov		eax,StylePos
				inc		eax
				invoke SendDlgItemMessage,hWin,IDC_EDTSTYLE,EM_SETSEL,StylePos,eax
				invoke PropertyStyleTxt,hWin,addr buffer
			.elseif eax==IDC_BTNSET
				mov		ecx,StylePos
				mov		eax,80000000h
				shr		eax,cl
				mov		ecx,StyleOfs
				.if StyleEx
					and		eax,000777FDh
					xor		(DIALOG ptr [ecx]).exstyle,eax
				.else
					and		eax,0FFFFFFFFh
					xor		(DIALOG ptr [ecx]).style,eax
				.endif
				.if eax
					invoke GetWindowLong,hPrpLstDlg,GWL_USERDATA
					mov		hCtl,eax
					invoke UpdateCtl,hCtl
					invoke PropertyStyleTxt,hWin,addr buffer
				.endif
			.endif
		.endif
	.elseif eax==WM_CLOSE
		invoke EndDialog,hWin,NULL
	.else
		mov eax,FALSE
		ret
	.endif
	mov  eax,TRUE
	ret

PropertyDlgProc endp

UpdateCbo proc uses esi,lpData:DWORD
	LOCAL	nInx:DWORD
	LOCAL	buffer[128]:BYTE
	LOCAL	buffer1[512]:BYTE
	LOCAL	buffer2[64]:BYTE

	invoke SendMessage,hPrpCboDlg,CB_RESETCONTENT,0,0
	mov		esi,lpData
	add		esi,sizeof DLGHEAD
	assume esi:ptr DIALOG
  @@:
	mov		eax,[esi].hwnd
	.if eax
		.if eax!=-1
			mov		al,[esi].idname
			.if al
				invoke lstrcpy,addr buffer,addr [esi].idname
			.else
				invoke ResEdBinToDec,[esi].id,addr buffer
			.endif
			invoke lstrcpy,addr buffer1,addr szCtlText
			mov		eax,[esi].ntype
			inc		eax
			.while eax
				push	eax
				invoke GetStrItem,addr buffer1,addr buffer2
				pop		eax
				dec		eax
			.endw
			push	esi
			invoke lstrlen,addr buffer
			lea		esi,buffer
			add		esi,eax
			mov		al,' '
			mov		[esi],al
			inc		esi
			invoke lstrcpy,esi,addr buffer2
			pop		esi
			invoke SendMessage,hPrpCboDlg,CB_ADDSTRING,0,addr buffer
			mov		nInx,eax
			invoke SendMessage,hPrpCboDlg,CB_SETITEMDATA,nInx,[esi].hwnd
		.endif
		add		esi,sizeof DIALOG
		jmp		@b
	.endif
	assume esi:nothing
	ret

UpdateCbo endp

SetCbo proc hCtl:DWORD
	LOCAL	nInx:DWORD

	invoke SendMessage,hPrpCboDlg,CB_GETCOUNT,0,0
	mov		nInx,eax
  @@:
	.if nInx
		dec		nInx
		invoke SendMessage,hPrpCboDlg,CB_GETITEMDATA,nInx,0
		.if eax==hCtl
			invoke SendMessage,hPrpCboDlg,CB_SETCURSEL,nInx,0
		.endif
		jmp		@b
	.endif
	ret

SetCbo endp

PropListSetTxt proc uses esi,hWin:HWND
	LOCAL	nInx:DWORD
	LOCAL	buffer[512]:BYTE

	invoke SendMessage,hWin,LB_GETCURSEL,0,0
	.if eax!=LB_ERR
		mov		nInx,eax
		invoke SendMessage,hWin,LB_GETTEXT,nInx,addr buffer
		lea		esi,buffer
	  @@:
		mov		al,[esi]
		inc		esi
		cmp		al,09h
		jne		@b
		invoke SendMessage,hWin,LB_GETITEMDATA,nInx,0
		.if eax==PRP_STR_CAPTION || eax==1005 || eax==1006
			invoke SendMessage,hPrpEdtDlgCld,EM_LIMITTEXT,MaxCap-1,0
		.else
			invoke SendMessage,hPrpEdtDlgCld,EM_LIMITTEXT,31,0
		.endif
		invoke SetWindowText,hPrpEdtDlgCld,esi
	.endif
	ret

PropListSetTxt endp

PropListSetPos proc
	LOCAL	rect:RECT
	LOCAL	nInx:DWORD
	LOCAL	lbid:DWORD

	invoke ShowWindow,hPrpEdtDlgCld,SW_HIDE
	invoke ShowWindow,hPrpBtnDlgCld,SW_HIDE
	invoke SendMessage,hPrpLstDlg,LB_GETCURSEL,0,0
	.if eax!=LB_ERR
		mov		nInx,eax
		invoke SendMessage,hPrpLstDlg,LB_GETTEXT,nInx,addr lbtxtbuffer
		mov		ecx,offset lbtxtbuffer
		mov		edx,offset szLbString
		.while byte ptr [ecx]!=VK_TAB
			mov		al,[ecx]
			mov		[edx],al
			inc		ecx
			inc		edx
		.endw
		mov		byte ptr [edx],0
		invoke SendMessage,hPrpLstDlg,LB_GETITEMRECT,nInx,addr rect
		invoke SendMessage,hPrpLstDlg,LB_GETITEMDATA,nInx,0
		mov		lbid,eax
		.if (eax>=PRP_BOOL_SYSMENU && eax<=499) || eax==1000 || eax==1003 || eax==1004 || eax==1007 || eax>65535
			sub		rect.right,lbHt
			mov		eax,rect.right
			sub		eax,rect.left
			.if eax<lbTp+32-lbHt
				mov		rect.right,lbTp+32-lbHt
			.endif
			invoke SetWindowPos,hPrpBtnDlgCld,HWND_TOP,rect.right,rect.top,lbHt,lbHt,0
			invoke ShowWindow,hPrpBtnDlgCld,SW_SHOWNOACTIVATE
		.else
			invoke PropListSetTxt,hPrpLstDlg
			.if lbid==1002 || lbid==1005 || lbid==1006
				sub		rect.right,lbHt-1
				invoke SetWindowPos,hPrpBtnDlgCld,HWND_TOP,rect.right,rect.top,lbHt,lbHt,0
				invoke ShowWindow,hPrpBtnDlgCld,SW_SHOWNOACTIVATE
			.endif
			mov		rect.left,lbTp+1
			sub		rect.right,lbTp+1
			invoke SetWindowPos,hPrpEdtDlgCld,HWND_TOP,rect.left,rect.top,rect.right,lbHt-1,0
			invoke ShowWindow,hPrpEdtDlgCld,SW_SHOWNOACTIVATE
			invoke SendMessage,hPrpEdtDlgCld,EM_GETRECT,0,addr rect
			mov		rect.left,1
			invoke SendMessage,hPrpEdtDlgCld,EM_SETRECT,0,addr rect
		.endif
		xor		eax,eax
	.endif
	ret

PropListSetPos endp

TxtLstFalseTrue proc uses esi,CtlVal:DWORD,lpVal:DWORD

	invoke SendMessage,hPrpLstDlgCld,LB_RESETCONTENT,0,0
	invoke SendMessage,hPrpLstDlgCld,LB_ADDSTRING,0,addr szFalse
	mov		eax,lpVal
	invoke SendMessage,hPrpLstDlgCld,LB_SETITEMDATA,0,eax
	invoke SendMessage,hPrpLstDlgCld,LB_ADDSTRING,0,addr szTrue
	mov		eax,lpVal
	add		eax,8
	invoke SendMessage,hPrpLstDlgCld,LB_SETITEMDATA,1,eax
	mov		esi,lpVal
	mov		eax,[esi]
	xor		eax,-1
	and		eax,CtlVal
	.if eax==[esi+4]
		invoke SendMessage,hPrpLstDlgCld,LB_SETCURSEL,0,0
	.else
		invoke SendMessage,hPrpLstDlgCld,LB_SETCURSEL,1,0
	.endif
	ret

TxtLstFalseTrue endp

TxtLstMulti proc uses esi,CtlValSt:DWORD,CtlValExSt:DWORD,lpVal:DWORD
	LOCAL	buffer[256]:BYTE
	LOCAL	buffer1[64]:BYTE
	LOCAL	nInx:DWORD

	invoke SendMessage,hPrpLstDlgCld,LB_RESETCONTENT,0,0
	invoke lstrcpy,addr buffer,lpVal
	invoke lstrlen,lpVal
	add		lpVal,eax
	inc		lpVal
 @@:
	invoke GetStrItem,addr buffer,addr buffer1
	invoke SendMessage,hPrpLstDlgCld,LB_ADDSTRING,0,addr buffer1
	mov		nInx,eax
	invoke SendMessage,hPrpLstDlgCld,LB_SETITEMDATA,nInx,lpVal
	mov		esi,lpVal
	mov		eax,[esi]
	xor		eax,-1
	and		eax,CtlValSt
	.if eax==[esi+4]
		mov		eax,[esi+8]
		xor		eax,-1
		and		eax,CtlValExSt
		.if eax==[esi+12]
			invoke SendMessage,hPrpLstDlgCld,LB_SETCURSEL,nInx,0
		.endif
	.endif
	add		lpVal,16
	mov		al,buffer[0]
	or		al,al
	jne		@b
	ret

TxtLstMulti endp

PropTxtLst proc uses esi edi,hCtl:DWORD,lbid:DWORD
	LOCAL	nType:DWORD
	LOCAL	buffer[32]:BYTE

	invoke GetWindowLong,hCtl,GWL_USERDATA
	mov		esi,eax
	assume esi:ptr DIALOG
	push	[esi].ntype
	pop		nType
	invoke SetWindowLong,hPrpLstDlgCld,GWL_USERDATA,hCtl
	mov		eax,lbid
	.if eax==PRP_BOOL_SYSMENU
		invoke TxtLstFalseTrue,[esi].style,addr SysMDlg
	.elseif eax==PRP_BOOL_MAXBUTTON
		invoke TxtLstFalseTrue,[esi].style,addr MaxBDlg
	.elseif eax==PRP_BOOL_MINBUTTON

⌨️ 快捷键说明

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