【发布时间】:2014-12-16 15:37:11
【问题描述】:
我有一个 VB6 项目,我正在从使用 ListBoxes 切换到使用 ListViews。列表具有复选框样式。我正在寻找要发送到 ListView 的 Windows API 消息,这些消息指定:
- 全部勾选
- 取消选中所有
- 检查计数
这对于 ListBox 来说很容易,因为 Selected 与 Checked 是一样的。 ListView 不是这样。
除了 CHECKED not SELECTED 之外,其他类似的东西:
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETITEMCOUNT As Long = (LVM_FIRST + 4)
Private Const LVM_GETSELECTEDCOUNT As Long = (LVM_FIRST + 50)
Private Const LV_SETSEL = &H1000 + 43
Private Function ListViewSelectedCount(ByRef LV As ListView) As Long
ListViewSelectedCount = SendMessage(LV.hwnd, LVM_GETSELECTEDCOUNT, 0, 0)
End Function
Private Sub ListViewSelectAll(ThisBox As ListView)
Dim LV As LV_ITEM
LV.mask = &H8
LV.State = True
LV.stateMask = &H2
Call SendMessage(ThisBox.hwnd, LV_SETSEL, ByVal -1, LV)
End Sub
我确实找到了 ListView 消息列表:http://vbnet.mvps.org/index.html?code/comctl/lvmembers.htm 但似乎没有什么是我需要的。
【问题讨论】:
-
在 MSDN 上查看 Community Additions 的 LVM_SETITEMSTATE。它有一个如何为特定索引设置选中/未选中状态的示例。 但是,根据上面的文档,您可以传递 -1 以同时影响它们。 但据我所知,没有办法返回已检查项目的计数。您必须遍历每个项目并检查其状态,并不断累积。
-
嗯,部分路比我以前好。谢谢!