MFC图形函数学习07——画扇形函数

        绘制扇形函数是MFC中绘图的基本函数,它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形,特例是由圆弧与圆心连线构成的圆扇形。
一、绘制扇形函数    
       原型:BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);
       参数:含义同椭圆弧函数
       返回值:绘制成功返回非0数,否则返回0
       说明:
       a.扇形的边框宽度、颜色、线型需要通过画笔设置,画笔设置方法在《MFC图形函数学习03——画直线段函数》中已经学习过。
       b.扇形由中心点与弧线连接构成封闭图形,可以通过画刷填充内部;关于画刷,在《MFC图形函数学习04——画矩形函数》中学习过实体画刷、花纹画刷,在《MFC图形函数学习05——画椭圆函数》中学习过库画刷,这里均可以继续使用。
       c.扇形也如同椭圆弧一样,有起点和终点、顺时针、逆时针,默认为逆时针方向;需要调整时可以使用SetArcDirection()函数进行设置。
二、介绍一下CRect类与RECT结构体
        在介绍画椭圆弧函数时,学习过CPoint类和POINT结构体,这里再学习一下CRect类与RECT结构体,CRect类在最开始《MFC图形函数学习01——绘制二维图形的准备》中关于自定义坐标系内容中已经使用过这个类。下面介绍一下CRect类和RECT结构体:
  (一)、关于CRect类
       CRect类定义的是一个矩形,与RECT结构体相似,在以LPRECT或RECT结构体对象作参数的地方,可以用CRect对象来代替。
       a. CRect类有四个属性,分别是left、top、right、bottom,分别对应矩形的左上角坐标(x1,y1)右下角坐标(x2、y2)。
       b. 声明CRect的方法很简单,CRect 对象名;即可,也可以利用构造函数在声明时直接进行赋值,CRect 对象名(x1,y1,x2,y2);。
       c. CRect类常用成员函数:
           Width() 返回矩形宽度
           Height() 返回矩形高度
           其它成员函数略。
       d. CRect类还重载了诸如:"="、"=="、"!="、"+"、"-"等运算符,有兴趣可以网上查一下。
       e. 指向CRect对象的指针类型是LPCRECT。
  (二)、关于RECT结构体
       RECT结构体有四个属性,分别是left、top、right、bottom。指向RECT对象的指针类型是LPRECT,与指向CRect对象的指针差一个"C"。

三、绘制扇形案例程序
       题目:以窗口宽度、高度较小者的80%为长、宽做正方形的内切圆,圆心在坐标原点,以X轴、Y轴及过圆心的正负45度线将圆分割成8个扇形。在自定义坐标系中做出这8个扇形,扇形的填充颜色为红色、蓝色相互间隔,扇形的边框颜色与填充色相同。
      代码及注释如下:(若运行代码可拷贝到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);	
//二、定义红色、蓝色画笔画刷
    #define PI 3.14159 //定义π值
	CPen redPen,bluePen; //声明红色、蓝色画笔
	CPen* oldPen; //声明画笔指针,用于接收缺省画笔
	redPen.CreatePen(PS_SOLID, 1, 0x0000ff); //生成红色画笔
	bluePen.CreatePen(PS_SOLID, 1, 0xff0000); //生成蓝色画笔
	CBrush redBrush(0x0000ff),blueBrush(0xff0000); //声明并生成红、蓝画刷
	CBrush* oldBrush; //声明画刷指针,用于接收缺省画刷
	int r = min(rect.Width(), rect.Height()) * 0.8/2; //内切圆半径
	for (int i = 0; i < 8; i++) //用8次循环画8个扇形
	{
		int x1 = -r, y1 = r, x2 = r, y2 = -r; //内切正方形坐标
		int x3 = r * cos(i * PI / 4), y3 = r * sin(i * PI / 4); //扇形弧线起点
		int x4 = r * cos(i * PI / 4 + PI / 4), y4 = r * sin(i * PI / 4 + PI / 4);//扇形弧线终点
		if (i % 2 == 0) { //偶数(从0开始)扇形使用红色绘制
			oldPen=pDC->SelectObject(&redPen); //选入红色画笔
			oldBrush = pDC->SelectObject(&redBrush); //选入红色画刷
			pDC->Pie(x1, y1, x2, y2, x3, y3, x4, y4); //画出红色扇形
			pDC->SelectObject(oldPen); //恢复缺省画笔
			pDC->SelectObject(oldBrush); //恢复缺省画刷
		}
		else { //奇数扇形使用蓝色绘制
			oldPen = pDC->SelectObject(&bluePen); //选入蓝色画笔
			oldBrush = pDC->SelectObject(&blueBrush); //选入蓝色画刷
			pDC->Pie(x1, y1, x2, y2, x3, y3, x4, y4); //画出蓝色扇形
			pDC->SelectObject(oldPen);//恢复缺省画笔
			pDC->SelectObject(oldBrush);//恢复缺省画刷
		}
	}

运行结果截图:

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

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

相关文章

macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退

团队紧跟苹果最新系统发现bug:今日设备信息如下,希望能带给遇到这个问题的开发者一点帮助。 错误图如下: 点击证书文件后,先出现钥匙串访问图标,后立马闪退消失 中间试过很多方法,都是一样的表现,最后好在解决了,看网上也没有相关的帖子,这里直接写解决办法和导致原因…

Kotlin约束泛型参数必须继承自某个父类

Kotlin约束泛型参数必须继承自某个父类 open class SuperData { }class DataA : SuperData {constructor() {println("DataA constructor")} }class DataB : SuperData {constructor() {println("DataB constructor")} }fun <T : SuperData> myfun(p…

量子计算及其在密码学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 引言 量子计算概述 定义与原理 发展…

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种&#xff1a; Minor Compaction&#xff1a;是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile&#xff0c;对于删除、过期、多余版本的数据不进行清除。 Major Compaction&#xff1a;是指将所有的StoreFile合并成一个StoreFile&am…

任务中心全新升级,新增分享接口文档功能,MeterSphere开源持续测试工具v3.4版本发布

2024年11月5日&#xff0c;MeterSphere开源持续测试工具正式发布v3.4版本。 在这一版本中&#xff0c;系统设置方面&#xff0c;任务中心支持实时查看系统即时任务与系统后台任务&#xff1b;接口测试方面&#xff0c;新增接口文档分享功能、接口场景导入导出功能&#xff0c;…

RNN(循环神经网络)详解

1️⃣ RNN介绍 前馈神经网络&#xff08;CNN&#xff0c;全连接网络&#xff09;的流程是前向传播、反向传播和参数更新&#xff0c;存在以下不足&#xff1a; 无法处理时序数据&#xff1a;时序数据长度一般不固定&#xff0c;而前馈神经网络要求输入和输出的维度是固定的&a…

github加速下载zip

加速下载 1. 第一个网站 https://github.moeyy.xyz/把需要下载的链接复制进去&#xff0c;点下载https://github.com/dotnet/sdk/archive/refs/tags/v8.0.400.zip2. 第二个网站 https://gh-proxy.com/ 加速访问 2、查询github的ip地址 打开此网址&#xff1a;[IP 查询](http…

微服务电商平台课程三:搭建后台服务

前言 上节课,我们一起完成基础环境搭建,这节课, 我们利用上节课搭建我们电商平台.这节课我们采用开源代码进行搭建, 不论大家后续从事什么行业,都要学会站在巨人的肩膀上. 之前所说的,整个微服务平台的技术栈也是非常多的, 由于时间和效果的关系, 我们不可能从每个技术一步一…

模拟 [leecode 54] 螺旋矩阵

一、题解&#xff1a;上下左右四条线不断收紧 int l 0, r matrix[0].size() - 1;int high 0, low matrix.size() - 1;从左到右&#xff0c;顶部一层遍历完往下移一位&#xff0c;high&#xff1b;if(high>low) break;//遍历完了从上到下&#xff0c;遍历完右侧往左移一位…

丹摩征文活动|Llama3.1的部署与使用指南

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 丹摩征文 1. 初识Llama3.12. 部署流程创建实例登录实例部署LLama3.1 3. 实践使用教程4. 实践感想 前言&#xff1a;人工智能&#xff08;AI&…

人际交往中,想要有好人缘,需做到“三要”,做到一个,也是好事

人际交往中&#xff0c;想要有好人缘&#xff0c;需做到“三要”&#xff0c;做到一个&#xff0c;也是好事 在这个世上&#xff0c;每个人都是一座孤岛&#xff0c;但通过人际交往这座桥梁&#xff0c;我们能够彼此相连&#xff0c;共同编织出一张温暖的社会网络。 好人缘&a…

Sql server 备份还原方法

备份 方法1&#xff0c;选择对应的数据库名-------》右键 任务---------》备份 默认备份类型 完整 文件后缀 .bak 方法2,选择对应的数据库名-------》右键 任务----------》生成脚本 选择要编写的数据库对象(表&#xff0c;视图&#xff0c;存储过程等) 选择对应的 服…

NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL

在当今数字化时代&#xff0c;安防视频监控系统已成为保障公共安全和个人财产安全的重要工具。NVR设备ONVIF接入平台EasyCVR作为一款功能强大的智能视频监控管理平台&#xff0c;它不仅提供了视频远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、…

【MySQL】数据库知识突破:数据类型全解析与详解

前言&#xff1a;本节内容讲述MySQL的数据类型&#xff0c; 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作&#xff0c; 并没有对数据的内容进行操作&#xff0c;所以它叫做DDL。另外&#xff0c;还有…

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

Android Parcelable和Serializable的区别与联系

在Android开发中&#xff0c;Parcelable和Serializable是两种用来在组件之间传递数据的序列化机制。它们有不同的使用场景和性能特点。 以下是它们之间的关系和区别&#xff1a; 1. 什么是 Parcelable Parcelable 是 Android 特有的接口&#xff0c;用于高效地在进程间传递数…

Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载

Moonshine 是由 Useful Sensors 公司推出的一系列「语音到文本&#xff08;speech-to-text, STT&#xff09;转换模型」&#xff0c;旨在为资源受限设备提供快速而准确的「自动语音识别&#xff08;ASR&#xff09;服务」。Moonshine 的设计特别适合于需要即时响应的应用场景&a…

GitHub桌面版汉化

桌面版下载地址 https://desktop.github.com/ 汉化包下载地址 Releases cngege/GitHubDesktop2Chinese GitHub 点击运行 重启后

linux-vlan(1)

# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中&#xff0c;都有网络组件用于加载网页&#xff0c;鸿蒙ArkTS中也有类似的组件。   web组件&#xff0c;用于加载指定的网页&#xff0c;里面有很多的方法可以调用&#xff0c;虽然现在用得比较少&#xff0c;了解还是必须的。   演…