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…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
