void CScrollBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {int nCurrentPos=0;
switch(nSBCode)
{
case SB_THUMBTRACK:
   nCurrentPos=nPos;
  break;
case SB_THUMBPOSITION:
nCurrentPos=nPos;
break;
case SB_LINEUP:
nCurrentPos--;
break;
case SB_LINEDOWN:
nCurrentPos++;
break;
        case SB_PAGEUP:
nCurrentPos-=5;
break;
case SB_PAGEDOWN:
nCurrentPos+=5;
break;
}
    pScrollBar->SetScrollPos(nCurrentPos);}
//用这段代码不能实现滚动条的滚动,左键放开后,滚动条置0
int nCurrentPos=0;
switch(nSBCode)
{
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
break;
case SB_LINEUP:
pScrollBar->SetScrollPos(nCurrentPos-1);
break;
case SB_LINEDOWN:
pScrollBar->SetScrollPos(nCurrentPos+1);
break;
        case SB_PAGEUP:
pScrollBar->SetScrollPos(nCurrentPos-5);
break;
case SB_PAGEDOWN:
pScrollBar->SetScrollPos(nCurrentPos+5);
break;
}
//这段代码就能够实现,真是百思不得其解

解决方案 »

  1.   

    我想是这样的,有一个nSBCode没有在你给出的几个分支中,如果用上面一段代码,那么将执行最后一行:
    pScrollBar->SetScrollPos(nCurrentPos);  这是nCurrentPos 为0
    但下面一段代码不执行任何有意义的动作,如果将上面一段代码中加入一个
    default:
        return;  //注意是返回
    你就得到完全一样的效果了。
      

  2.   

    代码2处理了 SB_THUMBTRACK:ScrollBar在左键放开后发送这个代码的WM_HSCROLL消息,你必须响应这个消息并调用SetScrollPos()设置ScrollBar。
      

  3.   

    非常感谢各位,不过拖动滚动条,到某个位置停下来,究竟nsbcode应该是哪一个呀?
      

  4.   

    case SB_THUMBTRACK:
    case SB_THUMBPOSITION: