MFC图形函数学习08——绘图函数的重载介绍

        在《MFC图形函数学习06——画椭圆弧线函数》中介绍了CPoint类、POINT结构体;在《MFC图形函数学习07——画扇形函数》中介绍了CRect类、RECT结构体。在介绍完后,没有介绍它们怎样使用。实际上,这些类和结构体对象或指针也是我们学习过的绘图函数的参数类型,与使用(x,y)坐标做参数对照,构成了这些绘图函数的重载形式。由于这些函数已经学习过,这里仅做简要介绍。
一、绘制像素点函数的重载形式
       原型:a.COLORREF SetPixel( POINT point,COLORREF crColor);
                  b.BOOL SetPixelV(POINT point,COLORREF crColor);
       参数:点结构体POINT对象,此处也可以使用CPoint类对象
       返回值:a.返回使用的颜色值,类型为COLORREF
                     b.绘制成功返回非0数,失败返回0
       说明:a、b函数均为CDC类的成员函数,需要CDC类指针调用。
二、绘制直线段函数的重载
       原型:CPoint MoveTo(POINT point);
       参数:点结构体POINT对象(也可使用CPoint类对象)
       返回值:返回移动前的位置,需用CPoint类对象接收
       原型:BOOL LineTo(POINT point);
       参数:点结构体POINT对象(也可使用CPoint类对象)
       返回值:BOOL类型,画线成功返回非0数,失败返回0
       说明:MoveTo、LineTo两个函数均属于CDC类的成员函数,使用时需要CDC对象或指针调用。
三、绘制矩形函数的重载
       原型:BOOL Rectangle(LPCRECT lpRect);
       参数:LPCRECT类型的指向矩形类CRect对象的指针(也可使用LPRECT类型结构体指针)
       返回值:BOOL类型,绘制矩形成功返回非0数,失败返回0
       说明:Rectangle是CDC类的成员函数,使用时需要CDC对象或指针调用。
四、绘制椭圆函数
       原型:BOOL Ellipse (LPCRECT lpRect);
       参数:LPCRECT类型的指向矩形类CRect对象的指针(也可使用LPRECT类型结构体指针)
       返回值:BOOL类型,椭圆绘制成功返回非0数,失败返回0
       说明:Ellipse函数是CDC类的成员函数,使用时需要CDC对象或指针调用
五、绘制椭圆弧函数
       原型:BOOL Arc(LPCRECT lpRect,POINT ptStart,POINT ptEnd);
       参数:
          参1 LPCRECT lpRect指向内切矩形的指针(使用LPRECT指针也可)
          参2 POINT ptStart 弧线起点点结构体对象(也可使用CPoint类对象)
          参3 POINT ptEnd 弧线终点点结构体对象(同上)
       返回值:BOOL类型,弧线绘制成功返回非0数,失败返回0
       说明:Arc函数是CDC类的成员函数,使用时需要CDC对象或指针调用
六、绘制扇形函数
       原型:BOOL Pie(LPCRECT lpRect,POINT ptStart,POINT ptEnd);
       参数:同椭圆弧函数
       返回值:BOOL类型,弧线绘制成功返回非0数,失败返回0
       说明:Arc函数是CDC类的成员函数,使用时需要CDC对象或指针调用。 
七、使用上述重载函数绘制图形程序举例
       题目:在自定义坐标系中,(1)在原点半径25像素内使用SetPixelV绘制红色填充圆;(2)将填充色定义为透明,以窗口宽度、高度的75%绘制矩形、矩形的内切椭圆,线型为实线、2像素宽、红色;(3)将线的颜色调整为蓝色,线宽调整为4像素,将第一象限的椭圆绘制成蓝色椭圆弧;(4)按绘制弧线要求,将第三象限的椭圆绘制成扇形,填充色仍为透明。
      代码(放到OnDraw函数中可运行)如下:

//一、自定义坐标系
	CRect rect;
	GetClientRect(rect);
	pDC->SetMapMode(MM_ANISOTROPIC); 
	pDC->SetWindowExt(rect.Width(), rect.Height()); 
	pDC->SetViewportExt(rect.Width(), -rect.Height()); 
	pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
	rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
//二、在原点半径25像素内使用SetPixelV绘制红色填充圆
	CPoint point(-25,-25); //声明CPoint对象
	for (int i = -25; i <= +25; i++) {
		for (int j = -25; j <= +25; j++) {
			point.x = i;
			point.y = j;
			if (point.x * point.x + point.y * point.y < 625) {
				pDC->SetPixelV(point, 0x0000ff);
			}
		}
	}
//三、绘制矩形及矩形的内切椭圆
	CPen redPen;
	redPen.CreatePen(PS_SOLID, 2, 0x0000ff);
	CPen* oldPen = pDC->SelectObject(&redPen);
	CBrush* oldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	RECT myRect;
	myRect.left = -rect.Width() * 0.75 / 2;
	myRect.top = rect.Height() * 0.75 / 2;
	myRect.right = rect.Width() * 0.75 / 2;
	myRect.bottom = -rect.Height() * 0.75 / 2;
	LPRECT lpRect = &myRect;
	pDC->Rectangle(lpRect);
	pDC->Ellipse(lpRect);
	pDC->SelectObject(oldPen);
	oldPen->DeleteObject();
//四、将椭圆在第一象限部分绘制成蓝色椭圆弧
	CPen bluePen(PS_SOLID, 4, 0xff0000);
	oldPen = pDC->SelectObject(&bluePen);
	POINT start,end;
	start.x = myRect.right;
	start.y = 0;
	end.x = 0;
	end.y = myRect.top;
	pDC->Arc(lpRect, start, end);
//五、在第三象限绘制无填充蓝色扇形
	start.x = myRect.left;
	start.y = 0;
	end.x = 0;
	end.y = myRect.bottom;
	pDC->Pie(lpRect, start, end);
    pDC->SelectObject(oldBrush);
	pDC->SelectObject(oldPen);
//说明:当填充色选择透明时,前后绘制的图形不会被覆盖,都可以看到。

程序运行结果截图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP-ABAP开发-BAPI

BAPI基于数据库表的操作函数传入传出数据&#xff0c;本身函数有接口与增强无关 目录 一、BAPI接口定义 二、业务对象 三、查询方法 四、调用 五、BAPI创建 &#xff08;1&#xff09;在DDIC中创建一个结构 &#xff08;2&#xff09;创建BAPI函数模块和函数或API方法 …

Ceph MDS高可用架构探索:从零到一构建多主一备MDS服务

文章目录 Ceph实现MDS服务多主一备高可用架构当前 mds 服务器状态添加 MDS 服务器验证ceph集群当前状态当前的文件系统状态设置处于激活状态 mds 的数量MDS 高可用优化分发配置文件并重启 mds 服务 Ceph实现MDS服务多主一备高可用架构 Ceph 的元数据服务&#xff08;MDS&#…

python实战(八)——情感识别(多分类)

一、任务目标 本文使用的是来自Kaggle的一个情感识别数据集&#xff0c;这个数据集的总数据量是5934条&#xff0c;标签为anger、fear、joy三种情感的其中一种&#xff0c;很明显是一个多分类任务。这里&#xff0c;我们将使用微调技巧进行深度学习建模&#xff0c;同时我们会比…

价格战背后:即时零售三小龙的致命伤

价格战&#xff0c;从来就不仅仅是低价&#xff0c;低价前面永远要加上定语&#xff1a;确保品质和服务的。价格战是减法&#xff0c;更是加法。减去的是价格水分&#xff0c;加上的是品质和服务保障。 转载|原创新熵 作者丨宜新 编辑丨赛柯 今年双十一的热点&#xff0c;让人…

sd1.5/sdxl的推理,训练

1.sd1.5/sdxl的推理 主要讲述一下unet的降噪&#xff0c;以及采样器的作用&#xff0c;已sd1.5为例&#xff0c;sdxl类似 unet的降噪过程中&#xff0c;如20步降噪&#xff0c;这20个unet共用的一个权重 1.1 timesteps 根据unet的降噪步数&#xff0c;即num_inference_steps…

有哪些工具可以快速压缩图片呢?分享三个简单好用的图片压缩工具

现在的图片经常会因为图片过大的问题&#xff0c;影响在网上的上传使用&#xff0c;一般在平台上传图片时需要比较小的图片。但是随着现在图片质量的提升&#xff0c;导致图片的文件也越来越大&#xff0c;想要缩小图片大小&#xff0c;可以选择使用压缩图片的方法来处理。下面…

Java集合 List——针对实习面试

目录 Java集合 ListJava List的三种主要实现是什么&#xff1f;它们各自的特点是什么&#xff1f;Java List和Array&#xff08;数组&#xff09;的区别&#xff1f;Java List和Set有什么区别&#xff1f;ArrayList和Vector有什么区别&#xff1f;什么是LinkedList&#xff1f;…

请求接口时跨域问题详细解决方案

浏览器中的报错&#xff1a; 跨域问题通常需要前端和后端协作解决。以下是一些常用的解决方法&#xff0c;分别从前端和后端的角度进行讲解&#xff1a; 一. 后端解决方案 设置 CORS 头部&#xff1a; 最常用和推荐的方法是后端服务器设置 Access-Control-Allow-Origin 响应头…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C&#xff08;手机/平板等&#xff09;视频信号输入1路MIC1路LINE OUT,带1路HDMI环出&#xff0c;USB免驱&#xff0c;分辨率4K60&#xff0c;可采集3路信号中其中1路&#xff0c;按钮切换&#xff0c;可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

初级数据结构——顺序表

目录 前言一、定义与特点二、类型三、基本操作四、应用场景五、优缺点六、元素插入和删除动态图解插入删除 七、代码模板八、使用顺序表的经典例题1.求奇数的乘积代码题解 2.数值统计代码题解 九、总结结语 前言 顺序表示最基础的数据结构之一&#xff0c;它也是我们学习开始学…

arkUI:遍历数据数组动态渲染(forEach)

arkUI&#xff1a;遍历数据数组动态渲染&#xff08;forEach&#xff09; 1 主要内容说明2 相关内容2.1 ForEach 的基本语法2.2 简单遍历数组2.2 多维数组遍历2.4 使用唯一键2.5 源码1的相关说明2.5.1 源码1 &#xff08;遍历数据数组动态渲染&#xff09;2.5.2 源码1运行效果 …

新的恶意软件活动通过游戏应用程序瞄准 Windows 用户

一种新的恶意软件 Winos4.0 被积极用于网络攻击活动。FortiGuard实验室发现&#xff0c;这种先进的恶意框架是从臭名昭著的 Gh0strat 演变而来的&#xff0c;配备了模块化组件&#xff0c;可在受感染的设备上进行一系列恶意活动。 这些攻击已在游戏相关应用程序中发现&#xf…

Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上

一、Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 二、Maven安装步骤 1.下载后解压到没有空格、特殊字符和中文的目录中 2…

【刷题】优选算法

优选算法 双指针 202. 快乐数 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 【思路】 第一个实例是快乐数&#xff0c;因为会变为1且不断是1的循环 第二个实例不可能为1&#xff0c;因为会陷入一个没有1的循环 根据两个实例和鸽巢原理可以发现不断的平方和最…

在unity中实现把普通的照片,图片 变成油画风格的shader实现

可以通过对shader的Radius的值得设置来改变油画风格的力度&#xff0c;0最小&#xff0c;10是最大。

【项目开发 | 跨域认证】JSON Web Token(JWT)

未经许可,不得转载。 文章目录 JWT设计背景:跨域认证JWT 原理JWT 结构JWT 使用方式注意JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理、结构及用法。 JWT设计背景:跨域认证 互联网服务的用户认证流程是现代应用中的核心组成部分,通常的流程…

vue3中如何实现标准元素 拖动 功能 【收藏备用】

最近在用vue3做一个企业后台管理系统的项目,在登录页面的时候需要用户滑动滑块来获取验证码登录系统 用到了元素拖放 这里也顺便记录一下 如何使用的. 目录 1.功能介绍 2.代码部分 3 实现过程 3.1 设置可拖动元素 3.2 拖动什么 3.3 放到何处 3.4 进行放置 1.功能介绍…

Linux(CentOS)运行 jar 包

1、在本地终端运行&#xff0c;关闭终端&#xff0c;程序就会终止 java -jar tlias-0.0.1-SNAPSHOT.jar 发送请求&#xff0c;成功 关闭终端&#xff08;程序也会终止&#xff09; 发送请求&#xff0c;失败 2、在远程终端运行&#xff0c;关闭终端&#xff0c;程序就会终止 …

Local Dimming和Mini LED简介

文章目录 Local Dimming和Mini LED的介绍区别和联系联系区别总结 Local Dimming和Mini LED的介绍 电视显示技术中的Local Dimming和Mini LED都是用于提升画面质量的背光技术&#xff0c;主要目的是增强对比度和改善黑色表现。以下是对它们的详细介绍&#xff1a; Local Dimmin…

数据结构选择题及答案

一、选择题 1、下列查找方法中&#xff0c;&#xff08; &#xff09;适用于查找有序单链表。 A&#xff0e;分块查找; B&#xff0e;哈希查找; C&#xff0e;顺序查找; D&#xff0e;二分查找; 2、在有n个结点的二叉树的二叉链表表示中&#xff0c;空指针数为( )。 A&#xf…