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

****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);//将画刷选入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();}
}
定义画图函数:

//绘制直线函数
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]);		//将画笔选入DCpDC->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);
}


执行效果:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最近无埋点技术很是流行,抽空研究了下诸葛IO,talkingData以及百分点这些业内知名公司的无埋点SDK,抽取其中重要的信息供大家参考:

1、首先什么是无埋点呢&#xff0c;其实所谓无埋点就是开发者无需再对追踪点进行埋码&#xff0c;而是脱离代码&#xff0c;只需面对应用界面圈圈点点即可追加随时生效的事件数据点。 无埋点的好处 其实无埋点并不是完全不用写代码&#xff0c;而是尽可能的少写代码。开发者将S…

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

pix4d mapper相机未校准后手动添加连接点完美案例图文教程 整体预览 局部放大 如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 bl…

Blazor University (30)表单 —— 从 InputBase 派生

原文链接&#xff1a;https://blazor-university.com/forms/descending-from-inputbase/从 InputBase 派生源代码[1]InputBase<T> 组件是各种 Blazor 输入控件所继承的抽象类。这个类在标准 HTML <input> 元素的基础上增加了额外的功能&#xff0c;比如验证——我们…

3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

转自&#xff1a;https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步&#xff0c;新建一个工程&#xff0c;如图&#xff1a; 选 Java 写一个工程名&#xff0c;选择好工程路径&#xff0c;点下一步 选择 webServices &#xff0c;在右边的 version 中选择 …

ArcGIS实验教程——实验三十四:ArcGIS地统计分析全解(直方图、正态QQ图、趋势分析、voronoi图、半变异函数、协方差云)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、地统计分析的基本原理二、地统计分析的工作流程三、探索性空间数据分析工具1. 直方图2. QQ分布图3. 趋势分析4. Voronoi图5. 半变异函数与协方差云6. 交叉协方差云四、空间插值一、地…

用python计算圆周率

一、算法 马青公式&#xff1a;马青公式由英国天文学教授约翰马青(John Machin &#xff0c;1686 –1751)于1706年发现。马青公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数&#xff0c;所以可以很容易地在计算机上编程实现。 二、…

【Pix4d精品教程】垂直摄影空三加密生成DOM和DSM,并按10m间距提取高程点,生成等高线

在航测项目中,通常使用pix4d软件跑空三,生成数字正射影像DOM和数字表面模型DSM,当然还有点云数据。那么,在此基础之上,怎样根据航测要求,生成等间距5m或者10m的高程点和等高线呢,如上图所示?本文就来借助ArcGIS软件完成此波操作。 文章目录 一、Pix4d生成DOM和DSM二、A…

介绍一款python类型检查工具pyright

介绍 近日&#xff0c;微软在 Github 上开源了一个 Python 静态类型检查工具&#xff1a;pyright &#xff0c;引起了社区内的多方关注。 微软在开源项目上的参与力度是越来越大了&#xff0c;不说收购 Github 这种大的战略野心&#xff0c;只说它家开源的 VS Code 编辑器&am…

Eclipse利用Maven2搭建SpringMVC框架的Web工程

一、准备工作&#xff1a; 下载apache-maven--> 配置Maven_home -->下载Eclipse Maven插件 二、新建工程&#xff1a; 选择新建Maven Project archetype选择webapp-->输入group ID &#xff08;src下包名&#xff09;和Artifact ID (工程名) 新建Maven工程目录如上图…

【ArcGIS风暴】ArcGIS10.6获取栅格影像边界范围的三种方法案例详解

基于ArcGIS平台有多种办法可以提取栅格影像边界,常见的方法有3种: 栅格范围(Raster Domain)栅格转面(Raster to Polygon)创建轮廓(BuildFootprints)/构建边界(BuildBoundary)文章目录 1. 栅格范围(Raster Domain)2. 栅格转面(Raster to Polygon)3. 创建轮廓(Bui…

IDEA中使用数据库可视化操作工具

文章目录 1.入门介绍2. 没有数据库驱动3. 准备&测试连接3.1测试报错 4.连接5.编写SQL语句 1.入门介绍 在IDEA的专业版的右侧工具栏应该会有DataBase按钮如果没有的同学可以这样操作(必须是IDEA专业版) 新建数据库 2. 没有数据库驱动 如果提示: missing driver files ,…

WPF效果第一百九十篇之再耍ListBox

前面一篇效果基于Expander和ListBox实现了一下所需要的效果;今天再次实现点底部不一样的效果;最终实现的效果:1、ItemContainerStyle我是比较简单粗暴直接分了二行:ListBoxCanvas实现:<ControlTemplate TargetType"{x:Type ListBoxItem}"><Grid Background&…

Rabbitmq~对Vhost的配置

rabbitmq里有一些概念我们要清楚&#xff0c;如vhost,channel,exchange,queue等&#xff0c;而前段时间在部署rabbitmq环境时启用了虚拟主机vhost&#xff0c;感觉他主要是起到了消息隔离的作用,下面分别再说一下它们的知识。 VHost vhost去做第一层的区分&#xff0c;虚拟主机…

表单元素 开篇

今天开始讲述表单这个重要模块 可以说,JS 最早是为表单而发明的, 因此在没有JS之前,所有操作都需要提交后端验证,发现有误再重定向回原页面, 加上之前1,2KB的网速,这用户体验真是奇差无比.因此JS最初发明出来&#xff0c;就是做表单验证的&#xff0e; 围绕表单&#xff0c;添加…

如何画出一张合格的技术架构图?

阿里妹导读&#xff1a;技术传播的价值&#xff0c;不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径&#xff0c;加速业务的上线速率&#xff0c;也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享&#xff0c;以提高我们的专业能…

.NET 发布和支持计划介绍

.NET 发布和支持计划介绍Intro对于 .NET 的发布&#xff0c;大多数童鞋都知道现在每年发布一个版本&#xff0c;针对 .NET 的发布&#xff0c;最近有些更新&#xff0c;Current 版本将改为 STS 版本&#xff0c;所以写一篇文章介绍一下每年 11 月都会发布新的 .NET 主要版本&am…

【spring boot】8.spring boot的日志框架logback使用

在继续上一篇的Debug调试之后&#xff0c;把spring boot的日志框架使用情况逐步蚕食。 参考&#xff1a;http://tengj.top/2017/04/05/springbo 开篇之前&#xff0c;贴上完整application.properties日志相关配置 简介&#xff1a;spring boot的默认日志框架Logback SLF4J——…

通过iscsi配置在aix上挂载存储设备

本文中我们利用starwind虚拟存储进行设置&#xff0c;以下为实验环境说明&#xff1a;Windows环境&#xff1a;win7&#xff0c;ip address:10.3.5.7&#xff0c;iscsi initiator name &#xff1a;iqn.2008-08.com.starwindsoftware:joker-pc-aixAix环境&#xff1a;ip addres…

原生js声音播放代码

最终测试页页面 测试页面html代码(test.html) <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"Generator" content"EditPlus"><meta name"Author" content"…

写给 Kubernetes 工程师的 mTLS 指南

本文翻译节选自 A Kubernetes engineer’s guide to mTLS[1]&#xff0c;为了便于读者理解&#xff0c;笔者对原文做了一点修改 &#xff08;本文删除了原文中的与主题关系不大的 Linkerd 安装的部分&#xff0c;将 Twillio 替换成国内读者比较熟悉的 GitHub&#xff09;。因为…