当前位置:C++技术网 > 资讯 > MFC实现设置水平,垂直滚动轮

MFC实现设置水平,垂直滚动轮

更新时间:2015-12-10 21:59:36浏览次数:1+次

MFC封装类库中封装了一个消息,用来处理我们最常见的滚动轮滚动的设置。


我们在消息响应中添加代码:

BOOL CImagePanel::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
 SCROLLINFO siInfo;
 //获取垂直滚动条的滚动信息
 GetScrollInfo(SB_VERT,&siInfo);
 int nMin,nMax,nThumbWidth;
 //获取垂直滚动条的滚动范围
 nMin = siInfo.nMin;
 nMax = siInfo.nMax;
 //获取滚动块大小
 nThumbWidth = siInfo.nPage;
 //获取垂直滚动条当前滚动位置
 int nPos = GetScrollPos(SB_VERT);
 if (zDelta > 0)	//判断鼠标滚轮的滚动距离,大于零表示向前滚动,小于零表示向后滚动
 {
  if (nPos == 0)
   return TRUE;
  //设置垂直滚动条的滚动位置
  SetScrollPos(SB_VERT,nPos-6);
  //滚动窗口
  ScrollWindow(0,6);
 }
 else	 //向后滚动
 {
  if ((nPos+nThumbWidth >= nMax))
   return TRUE;
  //设置垂直滚动条的滚动位置
  SetScrollPos(SB_VERT,nPos+6);
  //滚动窗口
  ScrollWindow(0,-6);
 }
 return TRUE;//CDialog::OnMouseWheel(nFlags, zDelta, pt);
//	return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}
这里先解释下,OnMouseWheel函数的参数:

nFlags说明:指示虚拟按键是否按下 ,此参数可以是任何下列值的组合

MK_CONTROL 当CTRL键按下时
MK_LBUTTON 当鼠标左键按下时
MK_MBUTTON 当鼠标中键按下时(滚动不属于按下)
MK_RBUTTON 当鼠标右键按下时.
MK_SHIFT 当SHIFT按下时。
zDelta:大于0时为向上滚动,小于0时为向下滚动。A value less than zero indicates rotating back (toward the user) while a value greater than zero indicates rotating forward (away from the user). Windows下通常向上滚动缩小/窗口上移,反之放大/下移(好好学英语吧)
pt::鼠标的X,Y坐标,是以其父窗口的左上角为基点的。Specifies the x- and y-coordinate of the cursor. These coordinates are always relative to the upper-left corner of the window.
在这里说点别的,我们知道对于windows中函数消息的传递,主要是两参数wParam,lParam,两个参数,那么在这里的三个参数中,那个是wParam,那个是lParam?
WPara是一个16位短整型,LPara是一个32位长整形,这两个参数就是指针(一个是16位指针,一个是32位指针).
那么我就不用再说了吧。
OnMouseWheel函数中的参数zDelta带回来了必要的信息,我们可以直接用上。
直接看代码实现吧:

但是得记得哦,你在对话框的属性中的设置


还有个HScroll(水平滚动轮)也好设置true