本帖最后由 firefly3233 于 2011-12-14 18:02:30 编辑

解决方案 »

  1.   

    把WM_VSCROLL消息响应函数贴出来看看?
      

  2.   

    不是这个代码有问题。
    是因为成功不了,我只简单重载一下,来查看参数值,是默认的。
    void MyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {   CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
    }
      

  3.   

    CListCtrl控件自带的滚动条并不是CScrollBar控件,而是自己画上去的假窗口,因此实际上是通过CListCtrl的 GetScrollInfo和SetScrollInfo函数完成了滚动条位置信息的查询和设置.
    调用SetScrollInfo试试.如果是CListBox和CTree,这样调用
    SendMessage(WM_VSCROLL, MAKELONG(SB_THUMBPOSITION, 10),NULL);
    都是可以,楼主可以试试看?
      

  4.   

    假窗口?有WM_HSCROLL和WM_VSCROLL样式的窗口,当内容超过满过窗口大小时,会自动加上滚动条的.
    我用SetScrollPos(m_hWnd, SB_VERT, 100)试过了,可以设置滚动条到100行的位置,但窗口的内容还是原样不动的。
    我也知道别的控件,可以用SB_THUMBPOSITION的,但不知ListView为啥不行?一行,一页,到底,都没问题呀?可能还是有原因的,我想应该能解决的。
      

  5.   

    强制刷新不行的。LISTVIEW里有个Scroll方法,估计是达到上述要求,才专设的。我用了,确实管用: int i = 100;
    CRect rc;
    GetItemRect(i - 1, &rc, LVIR_BOUNDS);
    Scroll(CSize(0, rc.top));
      

  6.   

    EnsureVisible是可以,但如果是向下滚,要到达的项只会显示在最底部,向上滚,才会显示在顶部。
    我要的是始终显示在顶住(以引起人注意)
    用以下方法可以解决:    int i = 100;
        CRect rc;
        GetItemRect(i - 1, &rc, LVIR_BOUNDS);
        Scroll(CSize(0, rc.top));