各位大佬好,鄙人新手在做练习遇到以下问题,已绘制出几个简单的图形,例如点、直线、矩形、多边形等;如何通过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);恳请各位大佬给个思路!!!
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);恳请各位大佬给个思路!!!
解决方案 »
- 关于ADO数据库的问题,求各位大侠帮忙啊。。。。。
- CListCtrl重绘,但是老数据会被新数据覆盖(被一起重绘了)
- WritePrivateProfileString 的困惑....
- 调用了一个DLL后,程序运行结束时出错
- 每个类中的 m_hWnd 和 this 有什么区别?
- 编译环境的不同,程序Access Violation于HOOKDLL.DLL,原因怎样分析?请赐教
- 想做一个姓名查询功能,怎么就总是报错呢?
- VC是不是真的不好学?我投入不了,还是我没用心
- 关于Active控键开发,希望大家给点建议!
- MainFrame类成员变成Doc类成员
- C++将Access数据库中几十万条的数据导出至Excel文件
- 关于MFC显示主界面后通过Ribbon中登录按钮登录,获取管理员权限,然后把没有显示出来的停靠窗口显示更新在原来的主界面,求教?
2、设置的一个缩放参数R(float或double)
3、在滚轮事件中OnMouseWheel事件中,调整R值,并发出Invaledate(。。)
4、根据R值和原始图片参数计算图片的目标尺寸,
5、在OnPaint或OnDraw中,根据原始尺寸和目标尺寸,调用StretchBlt()将图片显示出来
这个不好,对于文字,用这个会缩放会变得模糊。我做过这功能,最好是按比例调整直线,矩形的位置,根据这个调整后的位置绘制。