当创建的视图类的基类是scrollview的时候,只要在视图初始化函数中,设置了滚动的范围。当打开大图像,需要显示滚动条时,在视图中滚动鼠标滑轮,视图就会自动滚动。但是这种情况在面对分割窗口的视图类时,却无法实现。
对于分割窗口后的视图类,无论怎么滚动,都不会响应鼠标滚动消息。只有采取以下的方法才可行:
经跟踪,发现,带分割条的对话框窗口的两个scrollview可分别捕捉自己view内的WM_LBUTTONDOWN。
在此消息的处理中把该view setfocus , 该view即可接收 WM_MOUSE WHEEL 消息。最终使用的CScrollView::DoMouseWheel函数,即可实现最基本的鼠标滚轮操作。(afxwin.h)
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
this->SetFocus();
CScrollView::OnLButtonDown(nFlags, point);
}
BOOL CMyView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
this->DoMouseWheel(nFlags, zDelta, pt);
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
}
未使用:根据zDelta的值得到滚动的方向和大小,用CScrollView::ScrollToPosition。应该得到scroll当前的pos吧。