MFC图形函数学习06——画椭圆弧线函数
绘制椭圆弧线函数是MFC基本绘图函数,这个函数需要的参数比较多,共四对坐标点。前两对坐标点确定椭圆的位置与大小,后两对坐标确定椭圆弧线的起点与终点。
一、绘制椭圆弧线函数
原型:BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);
参数:(x1,y1)、(x2,y2)椭圆内切矩形左上角、右下角坐标;(x3,y3)、(x4,y4)椭圆弧线的起点、终点坐标
返回值:绘制成功返回非0数,失败返回0
说明:
a.函数Arc是CDC类的成员函数,使用时需要CDC类对象或指针调用;
b.弧的起点、终点可以在椭圆上,也可以不在椭圆上;不在椭圆上时,起点、终点坐标点与椭圆中心的连接线割出椭圆弧线。
c.画椭圆弧的默认方向为逆时针方向,起点、终点弄反了会画出另一半弧线。如果希望改变椭圆弧的绘制方向,可用下面函数进行设置。
原型 int SetArcDirection(int nArcDirection);
参数 逆时针方向绘制 AD_COUNTERCLOCKWISE (缺省)
顺时针方向 AD_CLOCKWISE
返回值 成功返回弧的方向,失败返回0
说明:该函数是CDC类的成员函数,使用时需要CDC类对象或指针调用。
二、椭圆弧线的绘制
(一)、绘制弧线与绘制直线相同,仅涉及画笔,不涉及画刷,画笔的设置方法在绘制直线段时已经介绍过,这里不再赘述。
(二)、在描述坐标点时,使用的一直是(x,y)方式。在《MFC图形函数学习03——画直线段函数》曾提到过MoveTo函数的返回值类型是CPoint,还提到CPoint类与POINT结构体类似,可以表示的某点的坐标代替(x,y)这种写法。这里简要介绍一下CPoint类和POINT结构体。
1、CPoint类
CPoint类是点类,凡是使用(int x,int y)作参数的地方,均可利用已经赋值的CPoint对象作参数。CPoint类的声明、使用方法介绍如下:
a.声明CPoint类对象: CPoint myPoint;
b.为声明的对象赋初值,CPoint类有两个属性x和y。例如:myPoint.x=10; myPoint.y=20;。
c.也可以在声明CPoint对象时使用构造函数赋值:CPoint myPoint(10,20);。也可以利用CPoint的已赋值对象来初始化另一个对象,方法包括利用构造函数(例:CPoint a(myPoint)),也可以利用重载的等号(例:CPoint a=myPoint)。
d.CPoint的成员函数offset,可以对CPoint对象指定偏移量。例如:myPoint.offset(10,20);表示myPoint从当前位置x增加10,y增加20。
e.CPoint类还重载了“==”和“!=”,可以检查两个点是否相同或不同。也可以对两个CPoint对象利用重载的“+”、“-”符号进行加减运算。
2.POINT结构体
POINT结构体有两个属性,x和y。使用方法与CPoint类相同,声明对象:POINT p;,赋值:p.x=20;、p.y=30;。
关于CPoint类、POINT结构体的具体使用方法暂不介绍,待后续介绍完CRect类、RECT结构体、LPRECT指针后再在案例中介绍使用方法。
三、案例程序
题目:在设备坐标系中,画出矩形(-100,-50,100,50)内切椭圆被Y轴、X轴截取的椭圆弧,然后以X方向每次100、Y方向每次50放大椭圆(椭圆中心不变)并画出被Y轴、X轴截取的椭圆弧,至X或Y方向满窗口停止。弧线颜色为绿色,宽度3像素。代码及注释如下:
//定义绿色画笔并选入CDCCPen greenPen(PS_SOLID, 3, 0x00ff00);CPen* oldPen=pDC->SelectObject(&greenPen);
//初始椭圆内切矩形坐标int x1 = -100, y1 = -50, x2 = 100, y2 = 50;
//截取弧线起点、终点坐标(放到椭圆外,对所有椭圆生效)CRect rect;GetClientRect(rect); //获取窗口信息int startX = 0, startY = rect.bottom; //在Y轴顶端(设备坐标系)int endX = rect.right, endY = 0; //在X轴顶端
//利用循环绘制椭圆弧线while (TRUE){if (x2 >= rect.right || y2 >= rect.bottom)break; //退出条件pDC->Arc(x1,y1,x2,y2,startX,startY,endX,endY); //画弧线x1 = x1 - 100; y1 = y1 - 50; //放大椭圆x2 = x2 + 100; y2 = y2 + 50;}pDC->SelectObject(oldPen); //恢复画笔
说明:内切矩形的左上角坐标自始至终在绘图窗口之外,而程序运行是正常的,也就是说,MFC绘图函数是允许把图绘到屏幕之外,对此并不会报错。比如,案例程序不这样写,取消用X轴和Y轴切割弧线,而是用透明画刷做填充颜色画椭圆,由于设备坐标系只有一个象限,其余部分显示不出来,结果和切割椭圆弧一样。
四、案例程序运行截图
相关文章:

MFC图形函数学习06——画椭圆弧线函数
绘制椭圆弧线函数是MFC基本绘图函数,这个函数需要的参数比较多,共四对坐标点。前两对坐标点确定椭圆的位置与大小,后两对坐标确定椭圆弧线的起点与终点。 一、绘制椭圆弧线函数 原型:BOOL Arc(int x1,int y1,int x2,int y2…...

缓存、注解、分页
一.缓存 作用:应用查询上,内存中的块区域。 缓存查询结果,减少与数据库的交互,从而提高运行效率。 1.SqlSession 缓存 1. 又称为一级缓存,mybatis自动开启。 2. 作用范围:同一…...

【数据结构与算法】第9课—数据结构之二叉树(链式结构)
文章目录 1. 二叉树的性质2. 链式结构二叉树3. 二叉树链式结构的4种遍历方式4. 二叉树节点个数5. 二叉树的叶子节点个数6. 二叉树第k层节点个数7. 二叉树的高度/深度8. 二叉树查找值为x的节点9. 二叉树的销毁10. 判断是否为完全二叉树11. 二叉树练习题11.1 单值二叉树11.2 相同…...
【CSS】居中样式
对于行内元素,使用 text-align: center。对于已知宽度的块级元素,使用 margin: 0 auto。对于需要灵活布局的元素,使用 Flexbox 或 Grid。 flex .parent {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂…...
Vite环境下uniapp Vue 3项目添加和使用环境变量的完整指南
一、引言 在uniapp项目中,合理配置环境变量对于提高开发效率和保障项目安全至关重要。Vite作为新一代的前端构建工具,为环境变量的管理提供了简洁而强大的支持。下面,我们将一步步学习如何在Vite环境下为uniapp Vue 3项目添加和使用环境变量…...

mysql-springboot netty-flink-kafka-spark(paimon)-minio
1、下载spark源码并编译 mkdir -p /home/bigdata && cd /home/bigdata wget https://archive.apache.org/dist/spark/spark-3.4.3/spark-3.4.3.tgz 解压文件 tar -zxf spark-3.4.3.tgz cd spark-3.4.3 wget https://raw.githubusercontent.com/apache/incubator-celeb…...

讨论一个mysql事务问题
最近在阅读一篇关于隔离级别的文章,文章中提到了一种场景,我们下面来分析一下。 文章目录 1、实验环境2、两个实验的语句执行顺序3、关于start transaction和start transaction with consistent snapshot4、实验结果解释4.1、实验14.2、实验24.3、调整实…...
pytest插件精选:提升测试效率与质量
pytest作为Python生态系统中备受推崇的测试框架,以其简洁、灵活和可扩展性赢得了广泛的认可。通过合理使用pytest的各种插件,可以显著提升测试效率、增强测试的可读性和可维护性。 pytest-sugar:提升测试体验 pytest-sugar是一款增强版的py…...

HTB:Sightless[WriteUP]
目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 继续使用nmap对靶机开放的TCP端口进行脚本、服务扫描 首先尝试对靶机FTP服务进行匿名登录 使用curl访问靶机80端口 使用浏览器可以直接访问该域名 使用浏览器直接访问该子域 Getshell 横向移动 查…...

国产化浪潮下,高科技企业如何选择合适的国产ftp软件方案?
高科技企业在数字化转型和创新发展中,数据资产扮演着越来越重要的角色。在研发过程中产生的实验数据、设计文档、测试结果等,专利、商标、版权之类的创新成果等,随着信息量急剧增加和安全威胁的复杂化,传统的FTP软件已经不能满足这…...

自注意力机制
当输入一系列向量,想要考虑其中一个向量与其他向量之间的关系,决定这个向量最后的输出 任意两个向量之间的关系计算 计算其他向量对a1的关联性 多头注意力机制 图像也可以看成一系列的向量,交给自注意力机制处理,CNN是特殊的自注意…...
抽象工厂模式详解
1. 引言 1.1 设计模式概述 设计模式(Design Patterns)是软件开发中解决常见问题的一种最佳实践。它们通过总结经验,提供了一套被验证有效的代码结构和设计原则,帮助开发者提高代码的可维护性、可重用性和可扩展性。 设计模式主…...

【Linux】软硬链接和动静态库
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...

HarmonyOS入门 : 获取网络数据,并渲染到界面上
1. 环境搭建 开发HarmonyOS需要安装DevEco Studio,下载地址 : https://developer.huawei.com/consumer/cn/deveco-studio/ 2. 如何入门 入门HarmonyOS我们可以从一个实际的小例子入手,比如获取网络数据,并将其渲染到界面上。 本文就是基于…...
【贪心】【哈希】个人练习-Leetcode-1296. Divide Array in Sets of K Consecutive Numbers
题目链接:https://leetcode.cn/problems/divide-array-in-sets-of-k-consecutive-numbers/description/ 题目大意:给出一个数组nums[]和一个数k,求nums[]能否被分成若干个k个元素的连续的子列。 思路:比较简单,贪心就…...

【数据库实验一】数据库及数据库中表的建立实验
目录 实验1 学习RDBMS的使用和创建数据库 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六、实验结果 七、评价分析及心得体会 实验2 定义表和数据库完整性 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六…...

Web服务nginx基本实验
安装软件: 启动服务: 查看Nginx服务器的网络连接信息,监听的端口: 查看默认目录: 用Windows访问服务端192.168.234.111的nginx服务:(防火墙没有放行nginx服务,访问不了) …...

Ubuntu实现双击图标运行自己的应用软件
我们知道在Ubuntu上编写程序,最后编译得到的是一个可执行文件,大致如下 然后要运行的时候在终端里输入./hello即可 但是这样的话感觉很丑很不方便,下边描述一种可以类似Windows上那种双击运行的实现方式。 我们知道Ubuntu是有一些自带的程序…...
js id字符串转数组
将一个逗号分隔的字符串(例如 "12,123,213,")转换为一个 JavaScript 数组,并去除多余的逗号,可以使用以下几种方法。这里我将展示几种常见的方式: 方法 1: 使用 split 和 filter 你可以使用 split 方法将字…...

《手写Spring渐进式源码实践》实践笔记(第十八章 JDBC功能整合)
文章目录 第十八章 JDBC功能整合背景技术背景JDBC JdbcTemplate关键特性 用法示例业务背景 目标设计实现代码结构类图实现步骤 测试事先准备属性配置文件测试用例测试结果: 总结 第十八章 JDBC功能整合 背景 技术背景 JDBC JDBC(Java Database Conne…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...