CStrollView 滚动条

来源:互联网 发布:windows系统排名 编辑:程序博客网 时间:2024/06/05 23:59
OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: 在此添加消息处理程序代码和/或调用默认值int nMin,nMax,nCurPos,nDis;nDis=0;GetScrollRange(SB_VERT,&nMin,&nMax);nCurPos=GetScrollPos (SB_VERT);SCROLLINFO si ;    GetScrollInfo (SB_VERT,&si,SIF_ALL); switch(nSBCode)                 //处理滚动信息{case SB_LINEUP:                 //向左的箭头被按下nCurPos=nCurPos-10;Invalidate();break;  case SB_LINEDOWN:nCurPos=nCurPos+10;Invalidate();break;    //向右的箭头被按下case SB_THUMBTRACK:         //鼠标拖动si.cbSize=sizeof(SCROLLINFO);GetScrollInfo(SB_VERT,&si,SIF_TRACKPOS);nPos=si.nTrackPos; SetScrollPos(SB_VERT,nPos);nDis=(int)nPos-nCurPos;if (nDis>20||nDis<-20){Invalidate();nCurPos+=nDis;}break;}if(nCurPos>nMax)  nCurPos=nMax;SetScrollPos(SB_VERT,nCurPos);  //更新信息CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);}


因为: 窗口滚动条不是控件滚动条 所以pScrollBar始终为NULL


同时,nPos参数只有16位长.克服这个限制可以使用SCROOLINFO结构运行::GetScrollInfo.SCROLLINFO 结构中的nTrackPos是一个真正的32位

因此,如果滚动条范围很大,需要使用SCROOLINFO获得32位的值



参考资料:

http://bbs.csdn.net/topics/300120695


原创粉丝点击