非常棘手的问题,CSrollView滚动条设为大于32767后拖动滚动条位置到32767后又马上回到了1。试了很多办法也不行,我听别人说MFC中的ScrollView的滚动条是16位的所以最多只支持到32767,但我想总应该有解决的办法吧?我的开发环境是win2000+vc6,请高手指点。

解决方案 »

  1.   

    这是系统的一个bug(可以着说)。
    大多数系统,ScrollBar的滚动范围是16位的,所以当滚动值超过了32767后就会自动回到1。你升级ie为最新版本可以解决问题。
      

  2.   

    通用一些,重载CScrollView,自己想怎么干都行。简单一些,没必要设那么大的值吧,随便想个办法变通一下好了。
      

  3.   

    IE升级为多少呀?我系统已经是IE6.0,但还是一样呀。
    楼上的兄弟,如何重载CScrollView,给点代码吧。
      

  4.   

    我的问题和你样,刚发过贴
    http://expert.csdn.net/Expert/topic/1563/1563425.xml?temp=.186474这不是BUG,windows定义的消息包含32位的参数,其中后面的16位(short)用来定义pos参数,因此滚动条范围只能在32767范围(MSDN指明),但是只影响拖动操作,其他操作不使用pos参数,因此没影响如果你的滚动条必须设置>32767范围,同时使用正常的拖动操作,我看只有自己定义一套滚动条,从CView派生和CScrollView派生的类,使用他们的滚动条都应该不行。我现在准备将CScrollView中滚动条和工作区的设置分开,明天上班了再试试,这样滚动条可以在32767以下,工作区可以为64位。不知你是不是需要达到我这样的效果。
      

  5.   

    homeg兄:
        我确实要达到你哪样的效果,如果你试出来了也帮帮小弟呀。
      

  6.   

    发现一种非常快乐的方法,好险,差点走进死胡同:重载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);
    }大家一起幸福吧
      

  7.   

    homeg兄,太感谢你了,帮兄弟解决了一个大难题,马上给你加分。当然不是简单可以用分来报答的,再此小弟说一声“谢谢了!”