天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 10|回复: 0

MFC 直线 虚线 折线 圆 椭圆 矩形 弧形

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    ****Dlg.h头文件加入:

    //为project加入画笔、点变量数组
    public:
            CPen m_pen[5];
            CPoint m_point[5];
    public:
            void DrawLine(CDC *pDC);
            void DrawPolyline(CDC *pDC);
            void DrawPolygon(CDC *pDC);
            void DrawRect(CDC *pDC);
            void DrawRoundRect(CDC *pDC);
            void DrawEllipse(CDC *pDC);
            void DrawArc(CDC *pDC);
            void DrawAngleArc(CDC *pDC);

    ****Dlg.cpp构造函数改动:
    CLineTestDlg::CLineTestDlg(CWnd* pParent /*=NULL*/)
            : CDialogEx(CLineTestDlg::IDD, pParent)
    {
            m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

            //初始化画笔、点变量数组
            m_pen[0].CreatePen(PS_SOLID,1,RGB(255,0,0));         //红色实线。1像素宽---參数:样式、宽度、颜色
            m_pen[1].CreatePen(PS_SOLID,6,RGB(0,255,0));         //绿色实线,6像素宽
            m_pen[2].CreatePen(PS_DASH,1,RGB(255,0,0));                 //红色虚线,必须为一个像素宽
            m_pen[3].CreatePen(PS_DOT,1,RGB(0,0,255));                 //蓝色点线。必须为一个像素宽
            m_pen[4].CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));//红色双点虚线,必须为一个像素宽

            //绘制多边形的点数组
            m_point[0].x=10;
            m_point[0].y=100;
            m_point[1].x=10;
            m_point[1].y=120;
            m_point[2].x=100;
            m_point[2].y=105;
            m_point[3].x=170;
            m_point[3].y=120;
            m_point[4].x=170;
            m_point[4].y=100;
    }
    ***Dlg.cpp       onpaint函数
    void CLineTestDlg::OnPaint()
    {
            CPaintDC dc(this); // 用于绘制的设备上下文
            CBrush brush(RGB(190,190,190));//画刷
            dc.SelectObject(&brush);//将画刷选入DC
            DrawLine(&dc);
            DrawPolyline(&dc);
            DrawPolygon(&dc);
            DrawRect(&dc);
            DrawRoundRect(&dc);
            DrawEllipse(&dc);
            DrawArc(&dc);
            DrawAngleArc(&dc);

            if (IsIconic())
            {
                    CPaintDC dc(this); // 用于绘制的设备上下文
                    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

                    // 使图标在工作区矩形中居中
                    int cxIcon = GetSystemMetrics(SM_CXICON);
                    int cyIcon = GetSystemMetrics(SM_CYICON);
                    CRect rect;
                    GetClientRect(&rect);
                    int x = (rect.Width() - cxIcon + 1) / 2;
                    int y = (rect.Height() - cyIcon + 1) / 2;

                    // 绘制图标
                    dc.DrawIcon(x, y, m_hIcon);

                   
            }
            else
            {
                    CDialogEx::OnPaint();
            }
    }
    定义画图函数:
    //绘制直线函数
    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);
    }

     

     

     

     

    MFC 直线 虚线 折线 圆 椭圆 矩形 弧形
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:15 , Processed in 0.056420 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表