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

📄 listview.mac

📁 用汇编语言编写Windows驱动程序的工具
💻 MAC
📖 第 1 页 / 共 3 页
字号:
ListView_SetHoverTime MACRO hwnd:REQ, dwHoverTime:REQ
	invoke SendMessage, hwnd, LVM_SETHOVERTIME, 0, dwHoverTime
ENDM

IFNDEF LVM_SETICONSPACING
	LVM_SETICONSPACING equ LVM_FIRST + 53
ENDIF

;; -1 for x and y means we'll use the default (system settings)
;; 0 for x or y means use the current setting (allows you to change just one param)
ListView_SetIconSpacing MACRO hwnd:REQ, x:REQ, y:REQ
	invoke SendMessage, hwnd, LVM_SETICONSPACING, 0, $MAKEDWORD(x, y)
ENDM

ListView_SetImageList MACRO hwnd:REQ, himl:REQ, iImageList:REQ
	invoke SendMessage, hwnd, LVM_SETIMAGELIST, iImageList, himl
ENDM

IFNDEF LVSETINFOTIP
	LVSETINFOTIP STRUCT
		cbSize			UINT	?
		dwFlags			DWORD	?
		pszText			LPWSTR	?
		iItem			DWORD	?
		iSubItem		DWORD	?
	LVSETINFOTIP ENDS
ENDIF

IFNDEF LVM_SETINFOTIP
	LVM_SETINFOTIP equ LVM_FIRST + 173
ENDIF

ListView_SetInfoTip MACRO hwnd:REQ, plvInfoTip:REQ
	invoke SendMessage, hwnd, LVM_SETINFOTIP, 0, plvInfoTip
ENDM

IFNDEF LVM_SETINSERTMARK
	LVM_SETINSERTMARK equ LVM_FIRST + 166
ENDIF

ListView_SetInsertMark MACRO hwnd:REQ, lvim:REQ
	invoke SendMessage, hwnd, LVM_SETINSERTMARK, 0, lvim
ENDM

IFNDEF LVM_SETINSERTMARKCOLOR
	LVM_SETINSERTMARKCOLOR equ LVM_FIRST + 170
ENDIF

ListView_SetInsertMarkColor MACRO hwnd:REQ, color:REQ
	invoke SendMessage, hwnd, LVM_SETINSERTMARKCOLOR, 0, color
ENDM

ListView_SetItem MACRO hwnd:REQ, pitem:REQ
	invoke SendMessage, hwnd, LVM_SETITEM, 0, pitem
ENDM

ListView_SetItemCount MACRO hwnd:REQ, cItems:REQ
	invoke SendMessage, hwnd, LVM_SETITEMCOUNT, cItems, 0
ENDM

;; these flags only apply to LVS_OWNERDATA listviews in report or list mode
IFNDEF LVSICF_NOINVALIDATEALL
	LVSICF_NOINVALIDATEALL equ 1
ENDIF

IFNDEF LVSICF_NOSCROLL
	LVSICF_NOSCROLL equ 2
ENDIF

ListView_SetItemCountEx MACRO hwnd:REQ, cItems:REQ, dwFlags:REQ
	invoke SendMessage, hwnd, LVM_SETITEMCOUNT, cItems, dwFlags
ENDM

ListView_SetItemPosition MACRO hwnd:REQ, i:REQ, x:REQ, y:REQ
	invoke SendMessage, hwnd, LVM_SETITEMPOSITION, i, $MAKEDWORD(x, y)
ENDM

;;...................................................................
ListView_SetItemPosition32 MACRO hwnd:REQ, iItem:REQ, ix:REQ, iy:REQ
;;local SegName

;;	IFNDEF ListView_dummy_POINT
;;		;SegName TEXTEQU @CurSeg
;;		.data?
;;		ListView_dummy_POINT POINT <?>
;;		.code
;;		;line TEXTEQU %@Line
;;		;% ECHO @FileCur(line) : ListView_SetItemPosition32 macro report! Extra POINT structure defined.;;'
;;		;@CurSeg ENDS
;;		;SegName SEGMENT
;;	ENDIF

	sub esp, sizeof POINT

	IF (OPATTR (ix)) AND 00000010y				;; Is a memory variable
		push ix
		pop (POINT PTR [esp]).x
	ELSE
		mov (POINT PTR [esp]).x, ix
	ENDIF

	IF (OPATTR (iy)) AND 00000010y				;; Is a memory variable
		push iy
		pop (POINT PTR [esp]).y
	ELSE
		mov (POINT PTR [esp]).y, iy
	ENDIF

	invoke SendMessage, hwnd, LVM_SETITEMPOSITION32, iItem, esp
	add esp, sizeof POINT
ENDM

IFNDEF LVIS_ACTIVATING
	LVIS_ACTIVATING equ 20h
ENDIF

IFNDEF LVIF_INDENT
	LVIF_INDENT equ 10h
ENDIF

IFNDEF LVIF_NORECOMPUTE
	LVIF_NORECOMPUTE equ 800h
ENDIF

;;...................................................................
ListView_SetItemState MACRO hwnd:REQ, iItem:REQ, data:REQ, flags:REQ
;;local SegName
;;	IFNDEF ListView_dummy_LV_ITEM
;;		;SegName TEXTEQU @CurSeg
;;		.data?
;;		ListView_dummy_LV_ITEM LV_ITEM <>
;;		.code
;;		;line TEXTEQU %@Line
;;		;% ECHO @FileCur(line) : ListView_SetItemState macro report! Extra LV_ITEM structure defined.;;'
;;		;@CurSeg ENDS
;;		;SegName SEGMENT
;;	ENDIF

	sub esp, sizeof LV_ITEM
		
	IF (OPATTR (data)) AND 00000010y				;; Is a memory variable
		push data
		pop (LV_ITEM PTR [esp]).state
	ELSE
		mov (LV_ITEM PTR [esp]).state, data
	ENDIF

	IF (OPATTR (flags)) AND 00000010y				;; Is a memory variable
		push flags
		pop (LV_ITEM PTR [esp]).stateMask
	ELSE
		mov (LV_ITEM PTR [esp]).stateMask, flags
	ENDIF

	invoke SendMessage, hwnd, LVM_SETITEMSTATE, iItem, esp
	add esp, sizeof LV_ITEM
ENDM
;;...................................................................

ListView_SetCheckState MACRO hwnd:REQ, i:REQ, fCheck:REQ
local line, reax, err
	reax = 0
	err = 0

	IF (OPATTR (fCheck)) AND 00000100y				;; Is an immediate value
		IF fCheck
			ListView_SetItemState hwnd, i, $INDEXTOSTATEIMAGEMASK(2), LVIS_STATEIMAGEMASK
		ELSE
			ListView_SetItemState hwnd, i, $INDEXTOSTATEIMAGEMASK(1), LVIS_STATEIMAGEMASK
		ENDIF
	ELSE
		IF (OPATTR (fCheck)) AND 00010000y		;; Is a register value
			IFDIFI <fCheck>, <eax>					;; not eax
				xor eax, eax
				cmp fCheck, 0
				setnz al
			ENDIF
		ELSE
			xor eax, eax
			cmp fCheck, 0
			setnz al
		ENDIF
		inc eax
		shl eax, 12
		reax = 1

		IF reax
			IFIDNI <hwnd>, <eax>
				err = 1
			ENDIF
			IFIDNI <i>, <eax>
				err = 1
			ENDIF
			IF err
				line TEXTEQU %@Line
				% ECHO @FileCur(line) : ERROR! Register value overwritten by ListView_SetItemState macro.
				.ERR
			ENDIF		
		ENDIF
		ListView_SetItemState hwnd, i, eax, LVIS_STATEIMAGEMASK
	ENDIF
ENDM

;.............................................................
ListView_SetItemText MACRO hwnd:REQ, itm:REQ, sbi:REQ, psz:REQ
local SegName, p, line, reax, err
	reax = 0
	err = 0
;;	IFNDEF ListView_dummy_LV_ITEM
;;		;SegName TEXTEQU @CurSeg
;;		.data?
;;		ListView_dummy_LV_ITEM LV_ITEM <>
;;		.code
;;		;line TEXTEQU %@Line
;;		;% ECHO @FileCur(line) : ListView_SetItemText macro report! Extra LV_ITEM structure defined.;;'
;;		;@CurSeg ENDS
;;		;SegName SEGMENT
;;	ENDIF

	sub esp, sizeof LV_ITEM

	IF (OPATTR (sbi)) AND 00000010y				;; Is a memory variable
		push sbi
		pop (LV_ITEM PTR [esp]).iSubItem
	ELSE
		mov (LV_ITEM PTR [esp]).iSubItem, sbi
	ENDIF

    IF $IsAddr(psz)
;;    IF @InStr(1, <psz>, <addr >)
        p SUBSTR <psz>, 6
		IF (OPATTR (p)) AND 01000000y				;; Is relative to SS
			lea eax, p
			mov (LV_ITEM PTR [esp]).pszText, eax
			reax = 1
		ELSE
			mov (LV_ITEM PTR [esp]).pszText, offset p	;; 1 byte smaller than lea
		ENDIF		
	ELSEIF (OPATTR (psz)) AND 00010000y			;; Is a register value
		mov (LV_ITEM PTR [esp]).pszText, psz
	ELSEIF (OPATTR (psz)) AND 00000100y		;; Is an immediate value
	;;ELSEIF psz EQ 0
		;and (LV_ITEM PTR [esp]).pszText, 0
		mov (LV_ITEM PTR [esp]).pszText, psz
	ELSEIF (OPATTR (psz)) AND 00000010y				;; Is a memory variable
		push psz
		pop (LV_ITEM PTR [esp]).pszText	
	ELSE
		line TEXTEQU %@Line
		% ECHO @FileCur(line) : ListView_SetItemText macro ERROR! Can't recognize type of &psz. Should be string pointer.;;'
		.ERR
	ENDIF

	IF reax
		IFIDNI <hwnd>, <eax>
			err = 1
		ENDIF
		IFIDNI <itm>, <eax>
			err = 1
		ENDIF
		IF err
			line TEXTEQU %@Line
			% ECHO @FileCur(line) : ERROR! Register value overwritten by ListView_SetItemText macro.
			.ERR
		ENDIF		
	ENDIF
	invoke SendMessage, hwnd, LVM_SETITEMTEXT, itm, esp
	add esp, sizeof LV_ITEM
ENDM

IFNDEF LVM_SETOUTLINECOLOR
	LVM_SETOUTLINECOLOR equ LVM_FIRST + 177
ENDIF

ListView_SetOutlineColor MACRO hwnd:REQ, color:REQ
	invoke SendMessage, hwnd, LVM_SETOUTLINECOLOR, 0, color
ENDM

IFNDEF LVM_SETSELECTEDCOLUMN
	LVM_SETSELECTEDCOLUMN equ LVM_FIRST + 140
ENDIF

ListView_SetSelectedColumn MACRO hwnd:REQ, iCol:REQ
	invoke SendMessage, hwnd, LVM_SETSELECTEDCOLUMN, iCol, 0
ENDM

IFNDEF LVM_SETSELECTIONMARK
	LVM_SETSELECTIONMARK equ LVM_FIRST + 67
ENDIF

ListView_SetSelectionMark MACRO hwnd:REQ, iItem:REQ
	invoke SendMessage, hwnd, LVM_SETSELECTIONMARK, 0, iItem
ENDM

ListView_SetTextBkColor MACRO hwnd:REQ, clrText:REQ
	invoke SendMessage, hwnd, LVM_SETTEXTBKCOLOR, 0, clrText
ENDM

ListView_SetTextColor MACRO hwnd:REQ, clrText:REQ
	invoke SendMessage, hwnd, LVM_SETTEXTCOLOR, 0, clrText
ENDM

IFNDEF LVM_SETTILEINFO
	LVM_SETTILEINFO equ LVM_FIRST + 164
ENDIF

ListView_SetTileInfo MACRO hwnd:REQ, pti:REQ
	invoke SendMessage, hwnd, LVM_SETTILEINFO, 0, pti
ENDM

IFNDEF LVM_SETTILEVIEWINFO
	LVM_SETTILEVIEWINFO equ LVM_FIRST + 162
ENDIF

ListView_SetTileViewInfo MACRO hwnd:REQ, ptvi:REQ
	invoke SendMessage, hwnd, LVM_SETTILEVIEWINFO, 0, ptvi
ENDM

IFNDEF LVM_SETTOOLTIPS
	LVM_SETTOOLTIPS equ LVM_FIRST + 74
ENDIF

ListView_SetToolTips MACRO hwnd:REQ, hwndToolTip:REQ
	invoke SendMessage, hwnd, LVM_SETTOOLTIPS, hwndToolTip, 0
ENDM

IFNDEF LVM_SETTILEWIDTH
	LVM_SETTILEWIDTH equ LVM_FIRST + 141
ENDIF

ListView_SetTileWidth MACRO hwnd:REQ, cpWidth:REQ
	invoke SendMessage, hwnd, LVM_SETTILEWIDTH, cpWidth, 0
ENDM

IFNDEF LVM_SETUNICODEFORMAT
	LVM_SETUNICODEFORMAT equ CCM_SETUNICODEFORMAT
ENDIF

ListView_SetUnicodeFormat MACRO hwnd:REQ, fUnicode:REQ
	invoke SendMessage, hwnd, LVM_SETUNICODEFORMAT, fUnicode, 0
ENDM

IFNDEF LVM_SETVIEW
	LVM_SETVIEW equ LVM_FIRST + 142
ENDIF

ListView_SetView MACRO hwnd:REQ, iView:REQ
	invoke SendMessage, hwnd, LVM_SETVIEW, iView, 0
ENDM

IFNDEF LV_MAX_WORKAREAS
	LV_MAX_WORKAREAS equ 16
ENDIF

IFNDEF LVM_SETWORKAREAS
	LVM_SETWORKAREAS equ LVM_FIRST + 65
ENDIF

ListView_SetWorkAreas MACRO hwnd:REQ, nWorkAreas:REQ, prc:REQ
local n, line
	IF (OPATTR (nWorkAreas)) AND 00000100y
		;; Is an immediate value
		IF nWorkAreas GT LV_MAX_WORKAREAS
			n TEXTEQU %LV_MAX_WORKAREAS
			line TEXTEQU %@Line
			% ECHO @FileCur(line) : ListView_SetWorkAreas macro ERROR! The maximum number of working areas allowed is n.
			.ERR
		ENDIF
	ENDIF
	invoke SendMessage, hwnd, LVM_SETWORKAREAS, nWorkAreas, prc
ENDM

IFNDEF LVM_SORTGROUPS
	LVM_SORTGROUPS equ LVM_FIRST + 158
ENDIF

ListView_SortGroups MACRO hwnd:REQ, pfnGroupCompate:REQ, plv:REQ
	invoke SendMessage, hwnd, LVM_SORTGROUPS, pfnGroupCompate, plv
ENDM

ListView_SortItems MACRO hwnd:REQ, pfnCompare:REQ, lParamSort:REQ
	invoke SendMessage, hwnd, LVM_SORTITEMS, lParamSort, pfnCompare
ENDM

IFNDEF LVM_SORTITEMSEX
	LVM_SORTITEMSEX equ LVM_FIRST + 81
ENDIF

ListView_SortItemsEx MACRO hwnd:REQ, pfnCompare:REQ, lParamSort:REQ
	invoke SendMessage, hwnd, LVM_SORTITEMSEX, lParamSort, pfnCompare
ENDM

ListView_SubItemHitTest MACRO hwnd:REQ, plvhti:REQ
	invoke SendMessage, hwnd, LVM_SUBITEMHITTEST, 0, plvhti
ENDM

ListView_Update MACRO hwnd:REQ, iItem:REQ
	invoke SendMessage, hwnd, LVM_UPDATE, iItem, 0
ENDM

IFNDEF NMLVGETINFOTIP
	NMLVGETINFOTIP STRUCT
		hdr			NMHDR	<>
		dwFlags		DWORD	?
		pszText		LPSTR	?
		cchTextMax	UINT	?
		iItem		UINT	?
		iSubItem	UINT	?
		lParam		LPARAM	?
	NMLVGETINFOTIP ENDS

	NMLVGETINFOTIPW equ <NMLVGETINFOTIP>
	NMLVGETINFOTIPA equ <NMLVGETINFOTIP>
ENDIF

IFNDEF LVGIT_UNFOLDED
	LVGIT_UNFOLDED equ 1
ENDIF

IFNDEF LVN_GETINFOTIP
	LVN_GETINFOTIPA equ LVN_FIRST-57
	LVN_GETINFOTIPW equ LVN_FIRST-58
	IF UNICODE
		LVN_GETINFOTIP equ LVN_GETINFOTIPW
	ELSE
		LVN_GETINFOTIP equ LVN_GETINFOTIPA
	ENDIF
ENDIF

IFNDEF LVN_HOTTRACK
	LVN_HOTTRACK equ LVN_FIRST - 21
ENDIF

IFNDEF LVN_ITEMACTIVATE
	LVN_ITEMACTIVATE equ LVN_FIRST - 14
ENDIF

IFNDEF LVN_ODSTATECHANGED
	LVN_ODSTATECHANGED equ LVN_FIRST - 15
ENDIF

IFNDEF LVN_MARQUEEBEGIN
	LVN_MARQUEEBEGIN equ LVN_FIRST - 56
ENDIF

IFNDEF LVN_ODCACHEHINT
	LVN_ODCACHEHINT equ LVN_FIRST - 13
ENDIF

IFNDEF LVN_ODFINDITEM
	LVN_ODFINDITEMA equ LVN_FIRST - 52
	LVN_ODFINDITEMW equ LVN_FIRST - 79
	IF UNICODE
		LVN_ODFINDITEM equ LVN_ODFINDITEMW
	ELSE
		LVN_ODFINDITEM equ LVN_ODFINDITEMA
	ENDIF	
ENDIF

IFNDEF NM_CUSTOMDRAW
	NM_CUSTOMDRAW equ NM_FIRST - 12
ENDIF

IFNDEF NM_HOVER
	NM_HOVER equ NM_FIRST - 13
ENDIF

IFNDEF NM_RELEASEDCAPTURE
	NM_RELEASEDCAPTURE equ NM_FIRST - 16
ENDIF

⌨️ 快捷键说明

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