我们在使用List Control的时候,经常碰到,要重新刷新List Control的item来更新显示的内容,但是当数据很多的时候,就会出现滚动条被复位到最上面的问题。我也经常被这个问题折腾,今天偶然发现了一个好用的方法,不用重构,简单实现。
代码如下:
int iScrollPos = m_List.GetScrollPos(SB_VERT);
int iItemCount = m_List.GetItemCount();
int iRangLimit = m_List.GetScrollLimit(SB_VERT);
int iEnsureVisble = iScrollPos + (iItemCount - iRangLimit) - 1;
m_List.DeleteAllItems();
while(true)
{
//这里是添加item的代码,略过
}
m_List.EnsureVisible(iEnsureVisble, FALSE);
原理就是通过EnsureVisible来设置滚动条状态,而iEnsureVisble是通过计算得来的。亲测可用。