【发布时间】:2016-02-04 14:13:38
【问题描述】:
list-view control 有 LVM_GETTOPINDEX 消息,允许获取最顶部可见项的索引。
现在我需要设置最上面的可见项目,但令人惊讶的是没有自然的LVM_SETTOPINDEX消息。
有没有一种简单干净的方法来设置最上面的项目?
我的列表控件始终处于报告模式。
【问题讨论】:
-
LVM_ENSUREVISIBLE消息是一个开始。将lParam设置为FALSE以确保项目完全可见。但这只是确保它是可见的,它不一定将它放大到列表的顶部。当然,这将是相当困难的,这取决于列表视图控件的大小和其中的项目数。 -
@CodyGray as you write
LVM_ENSUREVISIBLE是一个开始,但这只是确保执行最小滚动以使所选项目可见,它将位于最后一行的第一行或最后一行on 如果所选项目在视图上方或下方。LVM_SETTOPINDEX又是微软忘记的东西。 -
考虑一下你是否有一个非常大的列表视图控件,并且只有几个项目。这些项目没有填满盒子,并且没有理由出现滚动条。现在,您将如何滚动它们以使项目#5 位于顶部?你不能。你不能以交互方式进行,也不能以编程方式进行。当然有时它会起作用,但有时它不会,所以你不能有一个通用的消息来做它。
-
获取最上面的项目(
LVM_GETTOPINDEX),如果想要的项目在上面你可以调用LVM_ENSUREVISIBLE,如果在下面,获取当前视口内的项目数(LVM_GETCOUNTPERPAGE) 然后你可以计算你需要与LVM_ENSUREVISIBLE一起使用的项目的索引,以将所需的项目带到顶部(want_at_top_index + LVM_GETCOUNTPERPAGE) - 1 -
我要做的是确保所需的项目首先可见,然后获取顶部索引,如果它们不是同一个项目,则计算它们之间的项目数并滚动 ListView 多个项目乘以当前项目高度。这也允许我在当前视图中的任何特定位置显示任何项目,而不仅仅是在顶部。例如,有时我希望一个项目出现在中心。