CZoomView






4.44/5 (27投票s)
一个提供“缩放”功能的类
引言
这个类基于CScrollView
实现缩放功能。它提供了方便地设置应用程序缩放比例的函数。
使用代码
使用应用程序向导创建一个文档/视图应用程序。将您的CView
类更改为继承自CZoomView
,而不是CView
或CScrollView
。这样,您的应用程序就具有了缩放功能。当您想要设置应用程序的缩放比例时,只需调用SetZoomScale()
方法即可。
void CDemoZoomView::OnViewZoomin() { SetZoomScale(m_zoomFactor + 1.0f); } void CDemoZoomView::OnViewZoomout() { SetZoomScale(m_zoomFactor - 1.0f); }
关注点
当我开始开发需要缩放功能的应用程序时,我看到其他人必须创建一个比例变量,并在所有绘图函数中乘以这个变量。这使用起来并不方便。因此,我尝试找到一种在一处设置比例,并将其应用于所有绘图代码的方法。幸运的是,有一些映射模式可以设置视口和窗口区域之间的比例。而MM_ISOTROPIC
就是答案。我们可以通过调用SetWindowExt()
和SetViewPortExt()
来设置比例。
int CZoomView::SetMapMode(CDC* pDC) { int previousMode = pDC->SetMapMode(MM_ISOTROPIC); pDC->SetWindowExt(100,100); pDC->SetViewportExt(FloatToInt(100*m_zoomFactor),FloatToInt(100*m_zoomFactor)); return previousMode; }
SetWindowExt()
和SetViewPortExt()
是CDC
类的函数。如果我们希望它们易于使用,用户不应该知道我们对CDC
类的实例做了什么。因此,我的CZoomView
拥有CDC
类的实例。这个实例将通过OnDraw()
函数发送。用户将调用正常的绘图函数,缩放功能将自动应用。
逻辑点和设备点
由于CZoomView
基于CScrollView
,因此需要考虑逻辑点和设备点。CZoomView
提供了DPtoLP
和LPtoDP
函数。用户可以像使用CDC
实例一样正常使用它们。
void CDemoZoomView::OnLButtonDown(UINT nFlags, CPoint point) { if (m_bSelectMode == FALSE) { m_bSelectMode = TRUE; m_ptStart = point; DPtoLP(&m_ptStart); m_rubberBand.SetRect(m_ptStart, m_ptStart); Invalidate(FALSE); } CZoomView::OnLButtonDown(nFlags, point); }
历史
- 2004年7月30日
- 减少无闪烁处理中不必要的位图分配。
- 2004年6月5日
- 添加了
CZoomView
,您可以将其代替CScrollView
类使用。
- 添加了