急:ListView的多行选择问题???
初期处理时把第5行设置为选择状态,
现想通过Shift键+Click来多选第4,5行,但是被选择的却是1到4行。
实在不知道怎么解决,请帮忙。(以下是源码)
[Form窗体的源码:(一ListView,与一Button)]
Const LVM_FIRST = &H1000
Const LVM_SETSELECTIONMARK = (LVM_FIRST + 67)
Const LVM_GETSELECTIONMARK = (LVM_FIRST + 66)
Const LVM_SETITEMSTATE = (LVM_FIRST + 43)
Const LVIS_FOCUSED = &H1
Const LVIS_SELECTED = &H2
Const LVIS_ACTIVATING = &H20
Const LVI_NOITEM = -1
Const LVNI_FOCUSED = &H1
Const LVNI_SELECTED = &H2
Const LVIF_INDENT = &H10
Const LVIF_STATE = &H8
Private 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 cmdReset_Click()
Call InitListView
End Sub
Private Sub InitListView()
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Clear
ListView1.View = lvwReport
ListView1.MultiSelect = True
ListView1.ColumnHeaders.Add , , "main"
ListView1.ColumnHeaders.Add , , "sub1"
ListView1.ColumnHeaders.Add , , "sub2"
For i = 1 To 10
ListView1.ListItems.Add , i & "A", i
ListView1.ListItems(i & "A").SubItems(1) = i * 10
ListView1.ListItems(i & "A").SubItems(2) = i * 100
Next i
ListView1.FullRowSelect = True
ListView1.GridLines = True
' ListView1.SelectedItem.Selected = False
' ListView1.SetFocus
' ListView1.ListItems(5).Selected = True
'------------------------------------------------------
Dim nLvItem As lvItem
nLvItem.state = 0
nLvItem.stateMask = LVIS_FOCUSED Or LVIS_SELECTED
nLvItem.mask = LVIF_STATE
Call SendMessage(ListView1.hWnd, LVM_SETITEMSTATE, -1, nLvItem)
Call SendMessage(ListView1.hWnd, LVM_SETSELECTIONMARK, 0, 4)
Dim mLvItem As lvItem
mLvItem.state = LVIS_FOCUSED Or LVIS_SELECTED
mLvItem.stateMask = -1
mLvItem.mask = LVIF_STATE
Call SendMessage(ListView1.hWnd, LVM_SETITEMSTATE, 4, mLvItem)
Call SendMessage(ListView1.hWnd, LVM_SETSELECTIONMARK, 0, 4)
ListView1.SetFocus
End Sub
[模块的源码]:
Option Explicit
Type lvItem
mask As Long
iItem As Long
iSubItem As Long
state As Long
stateMask As Long
pszText As String
cchTextMax As Long
iImage As Long
lParam As Long
'#If WIN32_IE >= &H300 Then
iIndent As Long
'#End If
'#If WIN32_IE >= &H560 Then
iGroupId As Long
cColumns As Long ' tile view columns
puColumns As Long
'#End If
End Type