我有一个CListCtrl(报告样式),可以在其中清除列表并在特定时间重新填充它。在执行此操作时,我想保持垂直滚动位置。我发现有两种方法看起来很有希望:
EnsureVisible()
GetScrollPos()
SetScrollPos()
GetScrollInfo()
GetTopIndex()
Scroll()
我正在尝试GetScrollPos(),然后是SetScrollPos(),但它似乎无法正常工作。保存滚动位置然后再恢复滚动位置的简单正确方法是什么?
更新
实际上,看来我可以保存滚动位置GetScrollPos(),然后保存SetScrollPos()来还原它,但是,从字面上看,它似乎只是设置了滚动条的位置,实际上并没有滚动CListCtrl的项目。
更新2
Scroll()方法似乎可以正确滚动滚动条和内容。但是,它将CSize对象作为参数。因此,问题将是如何在CSize和GetTopIndex或GetScrollInfo/Pos的输出之间进行转换。
最佳答案
我过去曾经做过。 IIRC,诀窍在于:
int topIndex= m_List.GetTopIndex();
RenewContents();
m_List.EnsureVisible(m_List.GetItemCount() - 1); // Scroll down to the bottom
m_List.EnsureVisible(topIndex);// scroll back up just enough to show said item on top
关于mfc - CListCtrl:如何保持滚动位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604267/