我有一个 CListCtrl (报告样式),我可以在其中清除列表并在某些时间重新填充它。我想在执行此操作时保持垂直滚动位置。我发现有几种看起来很有前途的方法:
EnsureVisible()
GetScrollPos()
SetScrollPos()
GetScrollInfo()
GetTopIndex()
Scroll()
我正在尝试 GetScrollPos() 然后 SetScrollPos() 但它似乎不起作用。保存滚动位置然后恢复它的简单正确方法是什么?
UPDATE
实际上,我似乎可以保存滚动位置 GetScrollPos(),然后 SetScrollPos() 来恢复它,但它实际上似乎只是设置滚动条位置,实际上并没有滚动我的 CListCtrl 的项目。
UPDATE 2
Scroll() 方法似乎可以正确滚动滚动条and内容。然而它需要一个 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)