图形绘制 点,线(直线、折线、随手画),面(圆,正方形)
功能要求
1.颜色,填充色可设置,修改
2.图形可删除,移动,放大缩小
3.可以保存并打开所画的
使用VS软件基于mfc的单文档编写
流程图
1.点击绘制按钮,选择绘制类型(点、线、面)
2.设置颜色、填充色
3.在画布上绘制图形
4.点击修改按钮,选择图形,修改颜色、填充色或者删除图形
5.点击移动按钮,选择图形,在画布上拖动图形至新位置
6.点击放大/缩小按钮,选择图形,调整图形大小
7.点击保存按钮,保存所画的图形
8.点击打开按钮,打开保存的图形
提供参考实例【MFC基于单文档实现绘图功能(线段,矩形,椭圆,圆,铅笔,橡皮),保姆式教程】,链接:https://blog.csdn.net/weixin_53637280/article/details/120133570
//绘制直线函数
void CLineTestDlg::DrawLine(CDC *pDC)
{
CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始画笔
for(int i=0;i<5;i++)
{
pDC->SelectObject(&m_pen[i]); //将画笔选入DC
pDC->MoveTo(20,20+i*15); //设置DC当前点
pDC->LineTo(170,20+i*15); //绘制直线
}
pDC->SelectObject(oldPen); //回复DC原画笔
}
//绘制折线
void CLineTestDlg::DrawPolyline(CDC *pDC)
{
CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始画笔
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
m_point[j].y+=35; //每次下移35个像素
}
pDC->SelectObject(&m_pen[i]);
pDC->Polyline(m_point,5);
}
pDC->SelectObject(oldPen);
}
//绘制多边形
void CLineTestDlg::DrawPolygon(CDC *pDC)
{
for(int j=0;j<5;j++)
m_point[j].y+=75; //数组中的点下移75个像素
CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始画笔
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
m_point[j].y+=35; //每次绘制图形下移35个像素
}
pDC->SelectObject(&m_pen[i]);
pDC->Polygon(m_point,5); //绘制多边形
}
pDC->SelectObject(oldPen);
}
//绘制矩形
void CLineTestDlg::DrawRect(CDC *pDC)
{
CRect rect(150,20,220,80);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);//每次绘图右移80个像素
pDC->SelectObject(&m_pen[i]);
pDC->Rectangle(&rect);//绘制矩形
}
pDC->SelectObject(oldPen);
}
//绘制圆角矩形
void CLineTestDlg::DrawRoundRect(CDC *pDC)
{
CRect rect(150,150,220,230);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);//每次绘图右移80个像素
pDC->SelectObject(&m_pen[i]);
pDC->RoundRect(&rect,CPoint(15,15));
}
pDC->SelectObject(oldPen);
}
//绘制椭圆
void CLineTestDlg::DrawEllipse(CDC *pDC)
{
CRect rect(150,260,220,310);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);
pDC->SelectObject(&m_pen[i]);
pDC->Ellipse(&rect);
}
pDC->SelectObject(oldPen);
}
//绘制弧线
void CLineTestDlg::DrawArc(CDC *pDC)
{
CRect rect(150,400,220,460);
CPoint ptStart(170,440);
CPoint ptEnd(210,400);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);
ptStart+=CPoint(80,0);
ptEnd+=CPoint(80,0);
pDC->SelectObject(&m_pen[i]);
pDC->Arc(&rect,ptStart,ptEnd);
}
pDC->SelectObject(oldPen);
}
//绘制直线与弧线
void CLineTestDlg::DrawAngleArc(CDC *pDC)
{
CRect rect(150,500,220,560);
CPoint ptCenter(185,600);
CPoint ptStart(150,630);
int r=30;
float angleStart=0;
float angleEnd=180;
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);
ptStart+=CPoint(80,0);
pDC->MoveTo(ptStart);
pDC->SelectObject(&m_pen[i]);
pDC->AngleArc(ptCenter.x,ptCenter.y,r,angleStart,angleEnd);
}
pDC->SelectObject(oldPen);
}