📄 listview.mac
字号:
;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;;
;; List View Control Macros
;;
;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;;
;; ListView.mac for 32 bit MASM v1.2 (September 2002)
;;
;; This file contains the macros, equates and structures
;; to make it easier to send messages to List View control
;;
;; This include file is written and maintained by Four-F (four-f@mail.ru)
;;
;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;; NOTE : windows.inc and cocomac.mac MUST be included before
;; as ListView.mac require some difinitions from it.
;;
;; If version of your windows.inc is prior to 1.25a ( 22 October 2001),
;; please remove the following line from windows.inc:
;; ListView_SetExtendedListViewStyle PROTO :DWORD, :DWORD
IFNDEF UNICODE
UNICODE = 0
ENDIF
IFNDEF LPWSTR
LPWSTR TYPEDEF PTR WORD ;; ???
ENDIF
IFNDEF LVS_OWNERDATA
LVS_OWNERDATA equ 1000h
ENDIF
IFNDEF LVS_EX_BORDERSELECT
LVS_EX_BORDERSELECT equ 8000h ;; border selection style instead of highlight
ENDIF
IFNDEF LVS_EX_DOUBLEBUFFER
LVS_EX_DOUBLEBUFFER equ 10000h
ENDIF
IFNDEF LVS_EX_HIDELABELS
LVS_EX_HIDELABELS equ 20000h
ENDIF
IFNDEF LVS_EX_SINGLEROW
LVS_EX_SINGLEROW equ 40000h
ENDIF
IFNDEF LVS_EX_SNAPTOGRID
LVS_EX_SNAPTOGRID equ 80000h ;; Icons automatically snap to grid.
ENDIF
IFNDEF LVS_EX_SIMPLESELECT
LVS_EX_SIMPLESELECT equ 100000h ;; Also changes overlay rendering to top right for icon mode.
ENDIF
IFNDEF LVIF_INDENT
LVIF_INDENT equ 10h
ENDIF
IFNDEF LVIF_NORECOMPUTE
LVIF_NORECOMPUTE equ 800h
ENDIF
IFNDEF LVIF_GROUPID
LVIF_GROUPID equ 100h
ENDIF
IFNDEF LVIF_COLUMNS
LVIF_COLUMNS equ 200h
ENDIF
IFNDEF LVIS_GLOW
LVIS_GLOW equ 10h
ENDIF
IFNDEF LVIS_ACTIVATING
LVIS_ACTIVATING equ 20h
ENDIF
IFNDEF LV_VIEW_ICON
LV_VIEW_ICON equ 0
LV_VIEW_DETAILS equ 1
LV_VIEW_SMALLICON equ 2
LV_VIEW_LIST equ 3
LV_VIEW_TILE equ 4
LV_VIEW_MAX equ 4
ENDIF
IFNDEF LVGF_NONE
LVGF_NONE equ 0
LVGF_HEADER equ 1
LVGF_FOOTER equ 2
LVGF_STATE equ 4
LVGF_ALIGN equ 8
LVGF_GROUPID equ 10h
ENDIF
IFNDEF LVGS_NORMAL
LVGS_NORMAL equ 0
LVGS_COLLAPSED equ 1
LVGS_HIDDEN equ 2
ENDIF
IFNDEF LVGA_HEADER_LEFT
LVGA_HEADER_LEFT equ 1
LVGA_HEADER_CENTER equ 2
LVGA_HEADER_RIGHT equ 4 ;; Don't forget to validate exclusivity
LVGA_FOOTER_LEFT equ 8
LVGA_FOOTER_CENTER equ 10h
LVGA_FOOTER_RIGHT equ 20h ;; Don't forget to validate exclusivity
ENDIF
IFNDEF LVGMF_NONE
LVGMF_NONE equ 0
LVGMF_BORDERSIZE equ 4
LVGMF_BORDERCOLOR equ 2
LVGMF_TEXTCOLOR equ 4
ENDIF
IFNDEF LVTVIF_AUTOSIZE
LVTVIF_AUTOSIZE equ 0
LVTVIF_FIXEDWIDTH equ 1
LVTVIF_FIXEDHEIGHT equ 2
LVTVIF_FIXEDSIZE equ 3
ENDIF
IFNDEF LVTVIM_TILESIZE
LVTVIM_TILESIZE equ 1
LVTVIM_COLUMNS equ 2
LVTVIM_LABELMARGIN equ 4
ENDIF
IFNDEF LVM_APPROXIMATEVIEWRECT
LVM_APPROXIMATEVIEWRECT equ LVM_FIRST + 64
ENDIF
ListView_ApproximateViewRect MACRO hwnd:REQ, x:REQ, y:REQ, iCount:REQ
invoke SendMessage, hwnd, LVM_APPROXIMATEVIEWRECT, iCount, $MAKEDWORD(x, y)
ENDM
ListView_Arrange MACRO hwnd:REQ, code:REQ
invoke SendMessage, hwnd, LVM_ARRANGE, code, 0
ENDM
IFNDEF LVM_CANCELEDITLABEL
LVM_CANCELEDITLABEL equ LVM_FIRST + 179
ENDIF
ListView_CancelEditLabel MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_CANCELEDITLABEL, 0, 0
ENDM
ListView_CreateDragImage MACRO hwnd:REQ, iItem:REQ, lpptUpLeft:REQ
invoke SendMessage, hwnd, LVM_CREATEDRAGIMAGE, iItem, lpptUpLeft
ENDM
ListView_DeleteAllItems MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_DELETEALLITEMS, 0, 0
ENDM
ListView_DeleteColumn MACRO hwnd:REQ, iCol:REQ
invoke SendMessage, hwnd, LVM_DELETECOLUMN, iCol, 0
ENDM
ListView_DeleteItem MACRO hwnd:REQ, iItem:REQ
invoke SendMessage, hwnd, LVM_DELETEITEM, iItem, 0
ENDM
ListView_EditLabel MACRO hwnd:REQ, iItem:REQ
invoke SendMessage, hwnd, LVM_EDITLABEL, iItem, 0
ENDM
IFNDEF LVM_ENABLEGROUPVIEW
LVM_ENABLEGROUPVIEW equ LVM_FIRST + 157
ENDIF
ListView_EnableGroupView MACRO hwnd:REQ, fEnable:REQ
invoke SendMessage, hwnd, LVM_ENABLEGROUPVIEW, fEnable, 0
ENDM
ListView_EnsureVisible MACRO hwnd:REQ, i:REQ, fPartialOK:REQ
invoke SendMessage, hwnd, LVM_ENSUREVISIBLE, i, $MAKEDWORD(fPartialOK, 0)
ENDM
ListView_FindItem MACRO hwnd:REQ, iStart:REQ, plvfi:REQ
invoke SendMessage, hwnd, LVM_FINDITEM, iStart, plvfi
ENDM
ListView_GetBkColor MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETBKCOLOR, 0, 0
ENDM
IFNDEF LVBKIMAGE
LVBKIMAGE STRUCT
ulFlags DWORD ?
hbm HBITMAP ?
pszImage LPSTR ?
cchImageMax DWORD ?
xOffsetPercent DWORD ?
yOffsetPercent DWORD ?
LVBKIMAGE ENDS
LVBKIMAGEA equ <LVBKIMAGE>
LVBKIMAGEW equ <LVBKIMAGE>
LVBKIF_SOURCE_NONE equ 0
LVBKIF_SOURCE_HBITMAP equ 1
LVBKIF_SOURCE_URL equ 2
LVBKIF_SOURCE_MASK equ 3
LVBKIF_STYLE_NORMAL equ 0
LVBKIF_STYLE_TILE equ 10h
LVBKIF_STYLE_MASK equ 10h
LVBKIF_FLAG_TILEOFFSET equ 100h
LVBKIF_TYPE_WATERMARK equ 10000000h
ENDIF
IFNDEF LVM_GETBKIMAGE
LVM_GETBKIMAGEA equ LVM_FIRST + 69
LVM_GETBKIMAGEW equ LVM_FIRST + 139
IF UNICODE
LVM_GETBKIMAGE equ LVM_GETBKIMAGEW
ELSE
LVM_GETBKIMAGE equ LVM_GETBKIMAGEA
ENDIF
ENDIF
ListView_GetBkImage MACRO hwnd:REQ, plvbki:REQ
invoke SendMessage, hwnd, LVM_GETBKIMAGE, 0, plvbki
ENDM
ListView_GetCallbackMask MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETCALLBACKMASK, 0, 0
ENDM
ListView_GetCheckState MACRO hwnd:REQ, iItem:REQ
invoke SendMessage, hwnd, LVM_GETITEMSTATE, iItem, LVIS_STATEIMAGEMASK
shr eax, 12
dec eax
ENDM
ListView_GetColumn MACRO hwnd:REQ, iCol:REQ, pcol:REQ
invoke SendMessage, hwnd, LVM_GETCOLUMN, iCol, pcol
ENDM
IFNDEF LVM_GETCOLUMNORDERARRAY
LVM_GETCOLUMNORDERARRAY equ LVM_FIRST + 59
ENDIF
ListView_GetColumnOrderArray MACRO hwnd:REQ, iCount:REQ, lpiArray:REQ
invoke SendMessage, hwnd, LVM_GETCOLUMNORDERARRAY, iCount, lpiArray
ENDM
ListView_GetColumnWidth MACRO hwnd:REQ, iCol:REQ
invoke SendMessage, hwnd, LVM_GETCOLUMNWIDTH, iCol, 0
ENDM
ListView_GetCountPerPage MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETCOUNTPERPAGE, 0, 0
ENDM
ListView_GetEditControl MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETEDITCONTROL, 0, 0
ENDM
ListView_GetExtendedListViewStyle MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0
ENDM
IFNDEF LV_GROUP
LV_GROUP STRUCT
cbSize UINT ?
imask UINT ?
pszHeader LPWSTR ?
cchHeader UINT ?
pszFooter LPWSTR ?
cchFooter LPWSTR ?
iGroupId UINT ?
stateMask UINT ?
state UINT ?
uAlign UINT ?
LV_GROUP ENDS
LVGROUP equ <LV_GROUP>
ENDIF
IFNDEF LVM_GETGROUPINFO
LVM_GETGROUPINFO equ LVM_FIRST + 149
ENDIF
ListView_GetGroupInfo MACRO hwnd:REQ, iGroupId:REQ, pgrp:REQ
invoke SendMessage, hwnd, LVM_GETGROUPINFO, iGroupId, pgrp
ENDM
IFNDEF LVGROUPMETRICS
LVGROUPMETRICS STRUCT
cbSize UINT ?
imask UINT ?
Left UINT ?
Top UINT ?
Right UINT ?
Bottom UINT ?
crLeft COLORREF ?
crTop COLORREF ?
crRight COLORREF ?
crBottom COLORREF ?
crHeader COLORREF ?
crFooter COLORREF ?
LVGROUPMETRICS ENDS
ENDIF
IFNDEF LVM_GETGROUPMETRICS
LVM_GETGROUPMETRICS equ LVM_FIRST + 156
ENDIF
ListView_GetGroupMetrics MACRO hwnd:REQ, pGroupMetrics:REQ
invoke SendMessage, hwnd, LVM_GETGROUPMETRICS, 0, pGroupMetrics
ENDM
ListView_GetHeader MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETHEADER, 0, 0
ENDM
IFNDEF LVM_GETHOTCURSOR
LVM_GETHOTCURSOR equ LVM_FIRST + 63
ENDIF
ListView_GetHotCursor MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETHOTCURSOR, 0, 0
ENDM
IFNDEF LVM_GETHOTITEM
LVM_GETHOTITEM equ LVM_FIRST + 61
ENDIF
ListView_GetHotItem MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETHOTITEM, 0, 0
ENDM
IFNDEF LVM_GETHOVERTIME
LVM_GETHOVERTIME equ LVM_FIRST + 72
ENDIF
ListView_GetHoverTime MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETHOVERTIME, 0, 0
ENDM
ListView_GetImageList MACRO hwnd:REQ, iImageList:REQ
invoke SendMessage, hwnd, LVM_GETIMAGELIST, iImageList, 0
ENDM
IFNDEF LVINSERTMARK
LVINSERTMARK STRUCT
cbSize UINT ?
dwFlags DWORD ?
iItem DWORD ?
dwReserved DWORD ?
LVINSERTMARK ENDS
ENDIF
IFNDEF LVIM_AFTER
LVIM_AFTER equ 1 ; TRUE = insert After iItem, otherwise before
ENDIF
IFNDEF LVM_GETINSERTMARK
LVM_GETINSERTMARK equ LVM_FIRST + 167
ENDIF
ListView_GetInsertMark MACRO hwnd:REQ, lvim:REQ
invoke SendMessage, hwnd, LVM_GETINSERTMARK, 0, lvim
ENDM
IFNDEF LVM_GETINSERTMARKCOLOR
LVM_GETINSERTMARKCOLOR equ LVM_FIRST + 171
ENDIF
ListView_GetInsertMarkColor MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETINSERTMARKCOLOR, 0, 0
ENDM
IFNDEF LVM_GETINSERTMARKRECT
LVM_GETINSERTMARKRECT equ LVM_FIRST + 169
ENDIF
ListView_GetInsertMarkRect MACRO hwnd:REQ, rc:REQ
invoke SendMessage, hwnd, LVM_GETINSERTMARKRECT, 0, rc
ENDM
ListView_GetISearchString MACRO hwnd:REQ, lpsz:REQ
invoke SendMessage, hwnd, LVM_GETISEARCHSTRING, 0, lpsz
ENDM
ListView_GetItem MACRO hwnd:REQ, pitem:REQ
invoke SendMessage, hwnd, LVM_GETITEM, 0, pitem
ENDM
ListView_GetItemCount MACRO hwnd:REQ
invoke SendMessage, hwnd, LVM_GETITEMCOUNT, 0, 0
ENDM
ListView_GetItemPosition MACRO hwnd:REQ, i:REQ, ppt:REQ
invoke SendMessage, hwnd, LVM_GETITEMPOSITION, i, ppt
ENDM
;;............................................................
ListView_GetItemRect MACRO hwnd:REQ, i:REQ, prc:REQ, code:REQ
;;#define ListView_GetItemRect(hwnd, i, prc, code) \
;;SNDMSG(hwnd, LVM_GETITEMRECT, i, (prc ? (prc->left = code, prc) : NULL)
local p, line
IF $IsAddr(prc)
; IF @InStr(1, <prc>, <addr >)
p SUBSTR <prc>, 6
IF (OPATTR (p)) AND 01000000y ;; Is relative to SS
lea eax, p
IF (OPATTR (code)) AND 00000010y ;; Is a memory variable
push code
pop dword ptr [eax]
ELSEIF (OPATTR (code)) AND 00000100y ;; Is an immediate value
IF code
mov dword ptr [eax], code
ELSE ;; code = 0
and dword ptr [eax], 0
ENDIF
ELSE
mov dword ptr [eax], code
ENDIF
invoke SendMessage, hwnd, LVM_GETITEMRECT, i, eax
ELSE
IF (OPATTR (code)) AND 00000010y ;; Is a memory variable
push code
pop dword ptr p
ELSE
mov dword ptr p, code
ENDIF
invoke SendMessage, hwnd, LVM_GETITEMRECT, i, offset p
ENDIF
ELSEIF (OPATTR (prc)) AND 00010000y ;; Is a register value
IF (OPATTR (code)) AND 00000010y ;; Is a memory variable
push code
pop dword ptr [prc]
ELSE
mov dword ptr [prc], code
ENDIF
invoke SendMessage, hwnd, LVM_GETITEMRECT, i, prc
; ELSEIF prc EQ NULL
; invoke SendMessage, hwnd, LVM_GETITEMRECT, i, NULL
;line TEXTEQU %@Line
;% ECHO @FileCur(line) : ListView_GetItemRect macro ERROR! Pointer to RECT is NULL.
;.ERR
ELSE
line TEXTEQU %@Line
% ECHO @FileCur(line) : ListView_GetItemRect macro ERROR! Can't recognize type of &prc. Should be pointer to RECT.;;'
.ERR
ENDIF
ENDM
;;............................................................
ListView_GetItemSpacing MACRO hwnd:REQ, fSmall:REQ
invoke SendMessage, hwnd, LVM_GETITEMSPACING, fSmall, 0
ENDM
IFNDEF LVIS_ACTIVATING
LVIS_ACTIVATING equ 20h
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -