这个问题以前发过帖子,可惜链不上了,知道的人帮忙回答一下

解决方案 »

  1.   

    我调试了一下,发现原因如下:windows发送过来的消息用 short 来定义 nPos 参数, 所以 nPos一旦大于 32768时, 发送过来的 nPos = 0xffff????, 溢出后回到 0知道原因了,还是不知如何修改是好
      

  2.   

    对啊
    我用好多的软件
    用力拉滚动条
    也是弹回去
    不知道什么原因
    呵呵
    也许是windows的自身缺陷吧
    我瞎说的
      

  3.   

    MFC 指明滚动条范围不能超过 32768, 但CScrollView中调用SetScrollSize()时,同时设置了工作区大小和滚动条范围, 工作区高度和滚动区范围相同,而文件稍大,工作区高度显然要超过 32768。滚动条滚动时,除了拖动,其他方式都不使用 nPos参数,因此除了拖动操作外,其他滚动操作都正常。我现在试着将滚动条的范围设置在派生类中分离出来,有一些问题。如果使用CView类,自己加入滚动操作可以避免这个问题,又要改,太累。CodeGuru上有一个 CBigScrollView 类,看了一下,好像没有处理拖动操作。确实不想在这个问题上花太多时间,那位做过这方面的工作,Help。
      

  4.   

    重载OnVScroll函数,使用 GetScrollInfo()获取nPos的32位数值, 以下代码不完整,应该只处理
    SB_THUMBTRACK 和 SB_THUMBPOSITION void CXXXView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    SCROLLINFO ScrollInfo;
    GetScrollInfo(SB_VERT, &ScrollInfo, SIF_TRACKPOS);
    nPos = ScrollInfo.nTrackPos; CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
    }