如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
来源:互联网 发布:知进退明得失的文章 编辑:程序博客网 时间:2024/05/17 06:27
我创建的工程名字是默认的,叫MFCApplication3
首先在MFCApplication3Dlg.h这个文件中添加构造说明:
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);然后在MFCApplication3Dlg.cpp这个文件里面更改些东西和加点程序:
首先找到这个CMFCApplication3Dlg::CMFCApplication3Dlg(CWnd* pParent /*=NULL*/): CDialogEx(CMFCApplication3Dlg::IDD, pParent),这个创建的时候就自动产生了,改成这样:
CMFCApplication3Dlg::CMFCApplication3Dlg(CWnd* pParent /*=NULL*/): CDialogEx(CMFCApplication3Dlg::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;}
然后再继续找到这个函数void CMFCApplication3Dlg::OnPaint(),将里面的东西改成这样:
void CMFCApplication3Dlg::OnPaint(){CPaintDC dc(this); // 用于绘制的设备上下文CBrush brush(RGB(190, 190, 190));//画刷dc.SelectObject(&brush);//将画刷选入DCDrawLine(&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();}}然后继续在刚刚的同一个的MFCApplication3Dlg.cpp : 实现文件中,添加绘图函数:
//绘制直线函数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太难了,好多都看不懂了,哎,还是需要学习啊。
0 0
- 如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
- MFC 直线 虚线 折线 圆 椭圆 矩形 弧形
- MFC 直线 虚线 折线 圆 椭圆 矩形 弧形
- 如何用MFC画椭圆
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
- opencv画直线圆椭圆矩形
- opencv各种画图 直线 矩形 圆 椭圆
- 在MFC中,利用GDI绘制橡皮筋效果-直线,圆,椭圆,矩形
- walterzorn 系列-画线、圆、椭圆(卵形)、折线、多边形、矩形
- 【OpenCV3图像处理】绘图功能总结(直线,矩形,圆,椭圆,多边形,文字)
- opencv_tutorial_code学习——画椭圆、圆、填充矩形、直线
- 如何用android 画出三角形
- 如何用android 画出三角形
- 如何用silverlight 做用于图片展示的画廊(二):建立矩形、椭圆、异形图片框
- 如何用css画虚线
- MFC绘制矩形、椭圆、三角形
- MFC绘制矩形、椭圆、三角形
- Retrofit的简单使用
- K-D tree 数据结构
- 多线程3-线程的状态
- AC自动机
- Windows 10 IoT Serials 6
- 如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
- 我的毕业设计(一):翻译工具箱(TranslationToolbox)
- 欢迎使用CSDN-markdown编辑器
- scikit-learn SVM支持向量机算法库使用小结
- 奔五的人学iOS:swift对 状态栏、导航条若干技巧
- Android分包MultiDex源码分析
- 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- 高德地图定位功能(笔记)
- ffmpeg--问题