Option Explicit'----------------------------------------------------------------------------------------- ' Copyright ?1996-2004 VBnet, Randy Birch. All Rights Reserved Worldwide. ' Terms of use http://vbnet.mvps.org/terms/pages/terms.htm '-----------------------------------------------------------------------------------------Private Const LVM_FIRST = &H1000 Private Const LVM_GETHEADER = (LVM_FIRST + 31)Private Const HDI_BITMAP = &H10 Private Const HDI_IMAGE = &H20 Private Const HDI_FORMAT = &H4 Private Const HDI_TEXT = &H2Private Const HDF_BITMAP_ON_RIGHT = &H1000 Private Const HDF_BITMAP = &H2000 Private Const HDF_IMAGE = &H800 Private Const HDF_STRING = &H4000Private Const HDM_FIRST = &H1200 Private Const HDM_SETITEM = (HDM_FIRST + 4) Private Const HDM_SETIMAGELIST = (HDM_FIRST + 8) Private Const HDM_GETIMAGELIST = (HDM_FIRST + 9)Private Type HD_ITEM mask As Long cxy As Long pszText As String hbm As Long cchTextMax As Long fmt As Long lParam As Long iImage As Long iOrder As Long End TypePrivate Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Sub Form_Load() Dim i As Integer Dim itmX As ListItem
'Create and populate the listview With ListView1 .View = lvwReport .SmallIcons = ImageList1
For i = 1 To 3 .ColumnHeaders.Add , "x" & i, "Column " & i .ColumnHeaders.Item(i).Width = 1520 Next i
For i = 1 To 9 Set itmX = .ListItems.Add(, "key" & i, "Item " & i) itmX.SubItems(1) = "Subitem " & i itmX.SubItems(2) = "Subitem " & i Next i
End Sub Public Sub ShowHeaderIcon(colNo As Long, _ imgIconNo As Long, _ showImage As Long) Dim hHeader As Long Dim HD As HD_ITEM
'get a handle to the listview header component hHeader = SendMessage(ListView1.hwnd, LVM_GETHEADER, 0, ByVal 0)
'set up the required structure members With HD .mask = HDI_IMAGE Or HDI_FORMAT .pszText = ListView1.ColumnHeaders(colNo + 1).Text
If showImage Then .fmt = HDF_STRING Or HDF_IMAGE Or HDF_BITMAP_ON_RIGHT .iImage = imgIconNo Else .fmt = HDF_STRING End If End With
'modify the header Call SendMessage(hHeader, HDM_SETITEM, colNo, HD)
End SubPrivate Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) Dim i As Long Static sOrder
sOrder = Not sOrder
'Use default sorting to sort the items in the list ListView1.SortKey = ColumnHeader.Index - 1 ListView1.SortOrder = Abs(sOrder) ListView1.Sorted = True
'clear the image from the headers not 'currently selected, and update the 'header clicked For i = 0 To 2
'if this is the index of the header clicked If i = ListView1.SortKey Then
添加ImageList,ListView控件设置ImageList 插入图片到ImageList中,并标记好索引设置ListView 在它的 “图像列表”—》“小图标”和“列标头”设为ImageList'当点击标题时,显示相应的列标头 Private Sub ProfileList_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With ListView .Sorted = True .ColumnHeader.Icon = 1'显示倒三角 End WithEnd Sub
End WithPrivate Sub LvwOp_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) Dim i As Integer LvwOp.Sorted = True
For i = 1 To LvwOp.ColumnHeaders.Count LvwOp.ColumnHeaders(i).Text = LvwOp.ColumnHeaders(i).Tag Next
If ColumnHeader.Index = CInt(LvwOp.Tag) Then If LvwOp.SortOrder = lvwAscending Then LvwOp.SortOrder = lvwDescending Else LvwOp.SortOrder = lvwAscending End If End If
If LvwOp.SortOrder = lvwDescending Then ColumnHeader.Text = ColumnHeader.Tag & " ▽" Else ColumnHeader.Text = ColumnHeader.Tag & " △" End If
' Copyright ?1996-2004 VBnet, Randy Birch. All Rights Reserved Worldwide.
' Terms of use http://vbnet.mvps.org/terms/pages/terms.htm
'-----------------------------------------------------------------------------------------Private Const LVM_FIRST = &H1000
Private Const LVM_GETHEADER = (LVM_FIRST + 31)Private Const HDI_BITMAP = &H10
Private Const HDI_IMAGE = &H20
Private Const HDI_FORMAT = &H4
Private Const HDI_TEXT = &H2Private Const HDF_BITMAP_ON_RIGHT = &H1000
Private Const HDF_BITMAP = &H2000
Private Const HDF_IMAGE = &H800
Private Const HDF_STRING = &H4000Private Const HDM_FIRST = &H1200
Private Const HDM_SETITEM = (HDM_FIRST + 4)
Private Const HDM_SETIMAGELIST = (HDM_FIRST + 8)
Private Const HDM_GETIMAGELIST = (HDM_FIRST + 9)Private Type HD_ITEM
mask As Long
cxy As Long
pszText As String
hbm As Long
cchTextMax As Long
fmt As Long
lParam As Long
iImage As Long
iOrder As Long
End TypePrivate Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Sub Form_Load() Dim i As Integer
Dim itmX As ListItem
'Create and populate the listview
With ListView1
.View = lvwReport
.SmallIcons = ImageList1
For i = 1 To 3
.ColumnHeaders.Add , "x" & i, "Column " & i
.ColumnHeaders.Item(i).Width = 1520
Next i
For i = 1 To 9
Set itmX = .ListItems.Add(, "key" & i, "Item " & i)
itmX.SubItems(1) = "Subitem " & i
itmX.SubItems(2) = "Subitem " & i
Next i
End With
'ShowHeaderIcon colNo, imgIndex, showFlag
ShowHeaderIcon 0, 0, True
End Sub
Private Sub Command1_Click() Unload Me
End Sub
Public Sub ShowHeaderIcon(colNo As Long, _
imgIconNo As Long, _
showImage As Long) Dim hHeader As Long
Dim HD As HD_ITEM
'get a handle to the listview header component
hHeader = SendMessage(ListView1.hwnd, LVM_GETHEADER, 0, ByVal 0)
'set up the required structure members
With HD
.mask = HDI_IMAGE Or HDI_FORMAT
.pszText = ListView1.ColumnHeaders(colNo + 1).Text
If showImage Then
.fmt = HDF_STRING Or HDF_IMAGE Or HDF_BITMAP_ON_RIGHT
.iImage = imgIconNo
Else
.fmt = HDF_STRING
End If
End With
'modify the header
Call SendMessage(hHeader, HDM_SETITEM, colNo, HD)
End SubPrivate Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Long
Static sOrder
sOrder = Not sOrder
'Use default sorting to sort the items in the list
ListView1.SortKey = ColumnHeader.Index - 1
ListView1.SortOrder = Abs(sOrder)
ListView1.Sorted = True
'clear the image from the headers not
'currently selected, and update the
'header clicked
For i = 0 To 2
'if this is the index of the header clicked
If i = ListView1.SortKey Then
'ShowHeaderIcon colNo, imgIndex, showFlag
ShowHeaderIcon ListView1.SortKey, _
ListView1.SortOrder, _
True
Else
ShowHeaderIcon i, 0, False
End If
Next
End Sub
插入图片到ImageList中,并标记好索引设置ListView
在它的 “图像列表”—》“小图标”和“列标头”设为ImageList'当点击标题时,显示相应的列标头
Private Sub ProfileList_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With ListView
.Sorted = True
.ColumnHeader.Icon = 1'显示倒三角
End WithEnd Sub
.View = lvwReport
.ColumnHeaders.Add , "ID", "编号", .Width / 7
.ColumnHeaders(1).Tag = "编号"
.ColumnHeaders.Add , "Name", "名称", .Width / 3
.ColumnHeaders(2).Tag = "名称"
.ColumnHeaders.Add , "PWD", "密码", .Width / 4
.ColumnHeaders(3).Tag = "密码"
End WithPrivate Sub LvwOp_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Integer
LvwOp.Sorted = True
For i = 1 To LvwOp.ColumnHeaders.Count
LvwOp.ColumnHeaders(i).Text = LvwOp.ColumnHeaders(i).Tag
Next
If ColumnHeader.Index = CInt(LvwOp.Tag) Then
If LvwOp.SortOrder = lvwAscending Then
LvwOp.SortOrder = lvwDescending
Else
LvwOp.SortOrder = lvwAscending
End If
End If
If LvwOp.SortOrder = lvwDescending Then
ColumnHeader.Text = ColumnHeader.Tag & " ▽"
Else
ColumnHeader.Text = ColumnHeader.Tag & " △"
End If
LvwOp.Tag = ColumnHeader.Index
LvwOp.SortKey = ColumnHeader.Index - 1
LvwOp.Sorted = False
End Sub