1、CCDocumentSizeDoc 派生自 CDocument
2、CCDocumentSizeView 派生自 CView
double currentScaleFactor = 1.0; // 当前缩放比例,初始为1.0
double scaleFactorBase = 1.1;
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
BEGIN_MESSAGE_MAP(CCDocumentSizeView, CView)
// …………
ON_WM_MOUSEWHEEL()
END_MESSAGE_MAP()
// 缩放图形及比例
void CCDocumentSizeView::OnDraw(CDC* pDC)
{
CCDocumentSizeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
pDC->Rectangle(100 * currentScaleFactor, 100 * currentScaleFactor,600 * currentScaleFactor,800 * currentScaleFactor);
pDC->Ellipse(1000 * currentScaleFactor, 1000 * currentScaleFactor, 1600 * currentScaleFactor, 1600 * currentScaleFactor);
pDC->MoveTo(600, 500); // 设置直线起点坐标为(10, 10)
pDC->LineTo(700, 800); // 设置直线终点坐标为(100, 100)
}
// 缩放比例
BOOL CCDocumentSizeView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
if ((nFlags & MK_CONTROL) != 0) // 判断Ctrl键是否按下
{
if (zDelta > 0)
{
currentScaleFactor *= scaleFactorBase; // 放大
}
else if (zDelta < 0)
{
currentScaleFactor /= scaleFactorBase;
}
Invalidate(); // 触发重绘,使缩放效果生效
return TRUE;
}
return CView::OnMouseWheel(nFlags, zDelta, pt);
}