rt,我已经取得了ListView的特定项的序号,怎么使该特定项成为可见的最上面项呢,最好可以加亮显示

解决方案 »

  1.   

    //先把你现在选择的状态取消掉。
    POSITION it=m_list.GetFirstSelectedItemPosition();
    if(it!=NULL)
    m_list.SetItemState((int)(it-1),0,LVIS_SELECTED);
    //对特定的项进行显示并选择
    m_list.EnsureVisible(nItem,TRUE);
    m_list.SetItemState(nItem,LVIS_SELECTED,LVIS_SELECTED);
    ::SetFocus(m_list.GetSafeHwnd());
    上述功能可以使特定的项可见,并加亮显示,但不是在最上面,究竟在那里,分3种情况:
    1.特定项不可见,可见项在特定项的上面,则特定项显示在可见区域的最下面。
    2.特定项可见,则不动,只是加亮。
    3.特定项不可见,可见项在特定项的下面,则特定项显示在最上面。
      

  2.   

    自己算一下位置吧,然后滚动一下, nTop = GetTopIndex() ;
    CSize  sizeScroll ;
    sizeScroll.cx = 0 ;
    sizeScroll.cy = ( nPost - nTop ) * 19 ; //这个19是每列的高度
    Scroll( sizeScroll ) ;