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);//恢复缺省画刷}}

运行结果截图:

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

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

相关文章

vue 依赖注入(Provide、Inject )和混入(mixins)

Prop 逐级透传问题​ 通常情况下&#xff0c;当我们需要从父组件向子组件传递数据时&#xff0c;会使用 props。想象一下这样的结构&#xff1a;有一些多层级嵌套的组件&#xff0c;形成了一棵巨大的组件树&#xff0c;而某个深层的子组件需要一个较远的祖先组件中的部分数据。…

手机上用什么方法可以切换ip

手机上用什么方法可以切换IP&#xff1f;在某些特定情境下&#xff0c;用户可能需要切换手机的IP地址&#xff0c;以满足网络安全、隐私保护或绕过地域限制等需求。下面以华为手机为例&#xff0c;将详细介绍手机IP地址切换的几种方法&#xff0c;帮助用户轻松实现这一目标。 一…

一个强大的Stable Diffusion comfyUI 工作流,能实现写真自由、各种风格融合、面部特征一致性等等

今天&#xff0c;我们将向您介绍一款非常实用的工具——Stable Diffusion comfyUI工作流。这款工作流基于Stable Diffusion技术&#xff0c;旨在为您提供一键式生成图像的便捷体验。无论您是AI绘画的新手还是专业人士&#xff0c;这个工作流都能为您带来极大的便利。 在这个教…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——6.外泌体基因功能注释(二)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的相关性分析…

【Homework】【1--4】Learning resources for DQ Robotics in MATLAB

Learning resources for DQ Robotics in MATLAB Lesson 1 代码 % Step 2: Define the real numbers a1 and a2 a1 123; a2 321;% Step 3: Calculate and display a3 a1 a2 a3 a1 a2; disp([a3 (a1 a2) , num2str(a3)])% Step 4: Calculate and display a3 a1 * a2 a3…

linux命令详解,存储管理相关

存储管理 一、内存使用量&#xff0c;free free 命令是一个用于显示系统中物理内存&#xff08;RAM&#xff09;和交换空间&#xff08;swap&#xff09;使用情况的工具 free -m free -m -s 5参数 -b 功能: 以字节&#xff08;bytes&#xff09;为单位显示内存使用情况。说…

推荐一款功能强大的视频修复软件:Apeaksoft Video Fixer

Apeaksoft Video Fixer是一款功能强大的视频修复软件&#xff0c;专门用于修复损坏、不可播放、卡顿、画面失真、黑屏等视频问题。只需提供一个准确且有效的样本视频作为参考&#xff0c;该软件就能将受损视频修复到与样本视频相同的质量。该软件目前支持MP4、MOV、3GP等格式的…

Redis如何保证数据不丢失(可靠性)

本文主要以学习为主&#xff0c;详细参考&#xff1a;微信公众平台 Redis 保证数据不丢失的主要手段有两个&#xff1a; 持久化 多机部署 我们分别来看它们两的具体实现细节。 1.Redis 持久化 持久化是指将数据从内存中存储到持久化存储介质中&#xff08;如硬盘&#xf…

第三十九章 基于VueCli自定义创建项目

目录 1. 选择创建模式 2. 选择需要的功能 3. 选择历史模式还是哈希模式 ​4.CSS预处理器 5. 选择ESLint规则 6. 开始创建项目 ​7. 自定义项目最终结构 1. 选择创建模式 输入创建的项目名&#xff0c;创建项目&#xff1a; 这里选择自定义模式&#xff1a; 2. 选择需要…

【Vue3】基础语法案例

图片点击轮播 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>图片轮播</title> </head><body><div id"app"><h3>{{ number }}</h3><!-- 通过模板字…

【大数据学习 | kafka高级部分】kafka的kraft集群

首先我们分析一下zookeeper在kafka中的作用 zookeeper可以实现controller的选举&#xff0c;并且记录topic和partition的元数据信息&#xff0c;帮助多个broker同步数据信息。 在新版本中的kraft模式中可以这个管理和选举可以用kafka自己完成&#xff0c;而不再依赖zookeeper。…

生物发酵装备在制药工业中的应用与发展前景

在现代制药工业中&#xff0c;发酵技术扮演着越来越重要的角色。发酵设备&#xff0c;作为这一技术的核心&#xff0c;不仅促进了抗生素、疫苗和生物药物的生产&#xff0c;还为酶的生物合成提供了必要的条件。 发酵技术是指人们利用微生物的发酵作用&#xff0c;通过一系列的…

HCIP快速生成树 RSTP

STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09;和RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;都是用于在局域网中消除环路的网络协议。 STP&#xff08;生成树协议&#xff09; 基本概念&#xff1a; ST…

Excel 无法打开文件

Excel 无法打开文件 ‘新建 Microsoft Excel 工作表.xlsx",因为 文件格式或文件扩展名无效。请确定文件未损坏&#xff0c;并且文件扩展名与文件的格式匹配。 原因是卸载WPS之后&#xff0c;注册表未修改过来。 重新下载WPS&#xff0c;新建&#xff0c;xls工作表&#x…

【计算机网络】网络框架

一、网络协议和分层 1.理解协议 什么是协议&#xff1f;实际上就是约定。如果用计算机语言进行表达&#xff0c;那就是计算机协议。 2.理解分层 分层是软件设计方面的优势&#xff08;低耦合&#xff09;&#xff1b;每一层都要解决特定的问题 TCP/IP四层模型和OSI七层模型…

DPPE-N3中叠氮基团使得DPPE-N3能够与含有炔基的材料在铜离子的催化下发生点击化学反应,生成稳定的1,2,3-三唑环结构,2252461-33-7

一、基本信息 英文名称&#xff1a;DPPE-N3&#xff0c;DPPE-Azide 中文名称&#xff1a;DPPE-叠氮 CAS号&#xff1a;2252461-33-7 分子式&#xff1a;C43H83N4O9P 分子量&#xff1a;831.13 供应商&#xff1a;陕西新研博美生物科技 结构式&#xff1a; 二、结构特点…

算法学习第一弹——C++基础

早上好啊&#xff0c;大佬们。来看看咱们这回学点啥&#xff0c;在前不久刚出完C语言写的PTA中L1的题目&#xff0c;想必大家都不过瘾&#xff0c;感觉那些题都不过如此&#xff0c;所以&#xff0c;为了我们能更好的去处理更难的题目&#xff0c;小白兔决定奋发图强&#xff0…

[AcWing算法基础课]动态规划之01背包

题目链接&#xff1a;01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi&#xff0c;价值是 wi。求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。输出最大价值。 首先&#xff0c;我们…

FreeRTOS 24:事件组EventGroup等待、清零、获取操作

等待事件标志位xEventGroupWaitBits() 既然标记了事件的发生&#xff0c;那么我怎么知道他到底有没有发生&#xff0c;这也是需要一个函数来获 取 事 件 是 否 已 经 发 生 &#xff0c; FreeRTOS 提 供 了 一 个 等 待 指 定 事 件 的 函 数 — — xEventGroupWaitBits()&…

在线绘制带community的蛋白质-蛋白质相互作用(PPI)网络图

导读&#xff1a;分子相互作用网络图揭示了细胞内部分子间的复杂相互作用。通过识别网络中密集连接的节点所形成的社区&#xff08;community&#xff09;&#xff0c;可以揭示它们之间以前未知的功能联系。这些社区可能代表了具有共同功能的功能模块&#xff0c;对于理解细胞生…