滚动跳响应函数的一个问题

gamesuwei 2009-03-12 05:22:44
需要在拖动滚动条滑块的时候将文档视图移动到相应位置,但是一直无法实现。
MSDN上说OnVScroll 是在拖动滚动跳滑块的时候 滑块现在所在的位置,但是我一直无法正确设置到这个位置,nPos的值一会为正 一会位负,不知道为什么。
问题代码如下:

void CFPdfViewView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO si ;
GetScrollInfo (SB_VERT,&si,SIF_ALL);
switch(nSBCode)
{
case SB_LINEDOWN:
{
FX_INT32 pos = GetScrollPos(SB_VERT);
pos = pos + si.nMax*0.0002;
SetScrollPos(SB_VERT,pos);
Invalidate();
break;
}
case SB_LINEUP:
{
FX_INT32 pos = GetScrollPos(SB_VERT);
pos = pos - si.nMax*0.0002;
SetScrollPos(SB_VERT,pos);
Invalidate();
break;
}
case SB_THUMBTRACK:
{
//CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
break;
}
case SB_THUMBPOSITION:
{
SetScrollPos(SB_VERT,nPos);
TRACE("nPos: %d \n",nPos); //此处有问题nPos 一下为正书一下位负数无法正常移动
Invalidate();
break;
}
case SB_PAGEDOWN:
{
FX_INT32 pos = GetScrollPos(SB_VERT);
pos = pos + si.nMax*0.02;
if(pos < 0) pos = 0;
SetScrollPos(SB_VERT,pos);
Invalidate();
break;
}
case SB_PAGEUP:
{
FX_INT32 pos = GetScrollPos(SB_VERT);
pos = pos - si.nMax*0.02;
if(pos < 0) pos = 0;
SetScrollPos(SB_VERT,pos);
Invalidate();
break;
}
}
}

...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengwei_00a 2009-03-13
  • 打赏
  • 举报
回复
case SB_THUMBPOSITION: //释放鼠标键后的位置
{
si.cbSize=sizeof(SCROLLINFO);
GetScrollInfo(SB_VERT,&si,SIF_TRACKPOS);
nPos=si.nTrackPos;
SetScrollPos(SB_VERT,nPos);
SetViewPageByScrollPos();
Invalidate();
break;
}
nPos参数只有16位长.克服这个限制可以使用SCROOLINFO结构运行::GetScrollInfo.SCROLLINFO 结构中的nTrackPos是一个真正的32位
liuzxchina 2009-03-13
  • 打赏
  • 举报
回复
有两个地方需要处理
1 滚动条自身的滑动
2 视图的滑动,这个是通过设置视图的原点来实现的。
gamesuwei 2009-03-13
  • 打赏
  • 举报
回复
再次顶起下~
gamesuwei 2009-03-12
  • 打赏
  • 举报
回复
用的是MDI 的 CScrollView
cnzdgs 2009-03-12
  • 打赏
  • 举报
回复
哪种视图?滚动条怎么设置的?
gamesuwei 2009-03-12
  • 打赏
  • 举报
回复
顶一下~

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧