各位大佬好,鄙人新手在做练习遇到以下问题,已绘制出几个简单的图形,例如点、直线、矩形、多边形等;如何通过OnMouseWheel消息对所绘制图形实现放大和缩小呢?绘图代码如下:
CClientDC dc(this);
CPen pen(m_nLineStyle, m_nLineWidth, m_clr);
dc.SelectObject(&pen);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush); switch (m_nDrawType)
{
case 1:

dc.SetPixel(point,m_clr);
break;
case 2:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
break;
case 3:
dc.Rectangle(CRect(m_ptOrigin, point));
break;
case 4:
dc.Ellipse(CRect(m_ptOrigin, point));
break;
case 5:
if (m_CountPoint == 0)
{
m_PointFirst = point;
}

dc.SetPixel(point, m_clr);
PointArray[m_CountPoint++] = point;
m_ptEnd = point;
if (m_CountPoint >= 2) 
{
dc.Polyline(PointArray, m_CountPoint);
}
break;
}
        CGraph *pGraph = new CGraph(m_nDrawType, m_ptOrigin, point,m_clr,m_nLineWidth,m_nLineStyle);
    m_obArray.Add(pGraph);
CView::OnLButtonUp(nFlags, point);恳请各位大佬给个思路!!!

解决方案 »

  1.   

    StretchBlt()贴图~
      

  2.   

    使用 MM_ANISOTROPIC及 pDC->SetViewportExt
      

  3.   

    1、将你的原始图保存到一个内存DC中
    2、设置的一个缩放参数R(float或double)
    3、在滚轮事件中OnMouseWheel事件中,调整R值,并发出Invaledate(。。)
    4、根据R值和原始图片参数计算图片的目标尺寸,
    5、在OnPaint或OnDraw中,根据原始尺寸和目标尺寸,调用StretchBlt()将图片显示出来
      

  4.   

    http://blog.csdn.net/hyman_c/article/details/50290775
      

  5.   

    StretchBlt
    这个不好,对于文字,用这个会缩放会变得模糊。我做过这功能,最好是按比例调整直线,矩形的位置,根据这个调整后的位置绘制。