mfc绘图程序,希望能写完私发给我

图形绘制 点,线(直线、折线、随手画),面(圆,正方形)
功能要求
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);
}