示范背景:
CListCtrl m_listCtrl;
一秒钟向m_listCtrl里面添加以行数据,30行之后m_listCtrl右侧自动出现垂直滚动条,继续添加数据,滚动条向上移动。60行之后,删除所有数据,重新从第一行输入。问题:
1:控制垂直滚动条,使其在出现滚动条后,总是能显示出最后一行数据即是最后一次插入的数据。2:在全部删除数据的时候有闪烁情况。(我用的方法是m_listCtrl.DeleteAllItems());请教有什么方法可以处理这两种情况呢?谢了!

解决方案 »

  1.   

    1 EnsureVisible
    2 SetRedraw(false);m_listCtrl.DeleteAllItems());SetRedraw(true);
      

  2.   

    1 SetItemState  //LVIS_FOCUSED  LVIS_SELECTED
      

  3.   

    wangjia184的做法是正确的,
    用SetItmeState只能使某项处于选中状态,但并不能保证可见;而EnsureVisible就能保证指定项在界面可见。
      

  4.   

    // The pointer to my list view control.
    extern CListCtrl* pmyListCtrl;// Ensure that the last item is visible.
    int nCount = pmyListCtrl->GetItemCount();
    if (nCount > 0)
       pmyListCtrl->EnsureVisible(nCount-1, FALSE);
      

  5.   

    谢谢大家
    我的问题解决了。尤其是第一个问题。对于第二个问题我仍然有些问题,对于所有行数据删除后,并且把每列的标题栏也进行改名,改名的方法是删除所有列:DeleteColumn(),然后再通过添加改名后的列。
    方法如下:SetRedraw(false);DeleteColumn(),DeleteColumn(),InsertColumn(),SetRedraw(true);可是通过观察还是有很明显的闪烁情况,有大家碰到过吗?