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

news/2024/11/16 2:25:29/

        绘制扇形函数是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.ppmy.cn/news/1547326.html

相关文章

spark的学习-05

SparkSql 结构化数据与非结构化数据 结构化数据就类似于excel表中的数据&#xff08;统计的都是结构化的数据&#xff09;一般都使用sparkSql处理结构化的数据 结构化的文件&#xff1a;JSON、CSV【以逗号分隔】、TSV【以制表符分隔】、parquet、orc 结构化的表&#xff1a;…

C语言实现3D动态爱心图形的绘制与动画效果

**标题&#xff1a;C语言实现3D动态爱心图形的绘制与动画效果** --- ### 一、引言 在计算机图形学中&#xff0c;三维图形的绘制和动画处理是一个重要且有趣的研究方向。通过数学公式描述的几何体可以在计算机屏幕上展示出丰富多彩的动态效果&#xff0c;其中“爱心”图形作…

ssm103宠物领养系统+vue(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 宠物领养系统的设计与实现 学生姓名&#xff1a; 二级学院&#xff1a; 班级名称&#xff1a; 指导教师&#xff1a; 年 月 日 录 摘 …

STM32CubeMX学习笔记33---芯片因未选serial debug被锁住

利用STM32CubeMX配置了一个工程&#xff0c;下载到芯片后&#xff0c;芯片能够正常工作&#xff0c;但是在第二次通过SWD却怎么都连接不上芯片&#xff0c;偶尔按住复位键能够连接上芯片&#xff0c;但是无法读取也无法擦除flash。找了一些资料后才知道是由于STM32CubeMX没有配…

二:基于ABNF语义定义的HTTP消息格式

引言 超文本传输协议(HTTP,Hypertext Transfer Protocol)是网络通信中应用最广泛的协议之一。随着互联网技术的进步,HTTP协议逐步发展和规范化,形成了众多版本,如HTTP/1.0、HTTP/1.1、HTTP/2,以及最新的HTTP/3。HTTP协议规范的一个关键部分是对消息格式的定义,而其中广…

若依前后端分离版部署(超详细)

一、简介 有些特殊情况需要部署到子路径下,例如:https://www.jzjtest.cn/admin-hb,可以按照下面流程修改。 二、实现步骤 2.1 后端部署 自定义后端端口 # 开发环境配置 server:# 服务器的HTTP端口,默认为8080port: 10081通过maven:package一键打包成jar 将jar上传到服务器…

VBA即用型代码手册:设置PDF中标题行Set Header Row in Output PDF

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

python包管理工具pip和conda的使用对比

python包管理工具pip和conda的使用对比 总述1. pip使用2. conda注意虚拟环境之间的嵌套&#xff0c;这个会导致安装包后看不到包&#xff0c;实际是安装到了base环境里 未完待续 总述 pip相对于conda,对应包的依赖关系管理不强&#xff0c;坏处是容易造成包冲突&#xff0c;好…