CListCtrl更新ScrollBar问题

时间:2018-03-08 10:28:50

标签: c++ mfc scrollbar

我尝试通过删除所有项目并插入来更新CLstCtrl。但每次刷新后,scrollBar都会排在最前面。

CLONE_NEWNS

它尝试使用int nIndex; m_list.SetRedraw(FALSE); m_list.DeleteAllItems(); nIndex = m_list.InsertItem(0, "toto"); ... nIndex = m_list.InsertItem(50, "toto"); m_list.SetRedraw(TRUE); 并使用int iScroll = m_list.GetScrollPos(SB_VERT);恢复排名,但它不起作用。

我看到可以使用m_list.Scroll(CSize(0, iScroll));,但我还没有选择要设置的项目。

那么,我该如何恢复ScrollBar的位置呢。 感谢帮忙。

1 个答案:

答案 0 :(得分:0)

致电list.EnsureVisible(list.GetItemCount() - 1, TRUE)转到列表底部,然后致电list.EnsureVisible(topindex, TRUE)以确保topindex显示在最上方。见下面的例子。

请注意,我使用的是SetRedraw(BOOL)而不是list.SetRedraw(BOOL),否则当listview处于列表模式时,此方法无法正常工作。

int topindex = list.GetTopIndex();
SetRedraw(FALSE);

list.DeleteAllItems();
insert();

if(topindex >= 0)
{
    list.EnsureVisible(list.GetItemCount() - 1, TRUE);
    list.EnsureVisible(topindex, TRUE);
}

SetRedraw(TRUE);
list.Invalidate(TRUE);