mfc - CListCtrl:如何保持滚动位置?

标签 mfc scroll clistctrl

我有一个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/

相关文章:

html - 在移动设备上禁用水平滚动(或通过滚动单击)

javascript - slider HTML 表格行向上并重复

winapi - CListCtrl:如何保持水平滚动位置?

c++ - 获取使用 ES_PASSWORD MFC 进行 CEdit 时显示的粗体项目符号

c++ - 静态库中的对话框资源

c++ - VC 2015 U3 - 断言使应用程序崩溃

c++ - CListCtrl和CImageList访问HBITMAP进行修改

visual-c++ - 遍历 MFC CComboBox 的项目

jquery改变用户滚动的背景颜色

c++ - 无法在 CListCtrl 中编辑标签