visual Studio MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形实例

MFC 绘制三角形

本文使用visual Studio MFC 平台实现绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形.
关于基础工程的创建请参考Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线

文章目录

  • MFC 绘制三角形
    • 一、 绘制单一颜色三角形
    • 二、 绘制边框颜色渐变的三角形
    • 三、 绘制填充渐变色三角形
    • 四、绘制渐变色边框正方形
    • 五、绘制渐变色填充正方形

一、 绘制单一颜色三角形

通过dc.Polygon(pt, 3)绘制多边形.
在MFC(Microsoft Foundation Classes)中,dc.Polygon 函数用于在设备上下文(Device Context)中绘制多边形。这个函数的原型如下:

BOOL Polygon(const POINT* lpPoints,int nCount
);

参数解释:

  • lpPoints: 一个 POINT 结构体数组,表示多边形的顶点。每个 POINT 结构体包含 x 和 y 坐标,定义了多边形的一个顶点。
  • nCount: 顶点的数量。

返回值:

  • 如果函数成功,则返回非零值;如果函数失败,则返回零。

这个函数用给定的顶点数组在设备上下文中绘制一个多边形。代码片段中,pt[3] 是一个包含三个 CPoint 结构体的数组,表示一个三角形的三个顶点。然后,dc.Polygon(pt, 3) 调用绘制三角形。

CClientDC dc(this);
CPen pen(PS_SOLID, 4, RGB(255,182,193));//RGB(138, 100, 226) 表示紫罗兰色
CPen* oldPen = dc.SelectObject(&pen);//选择当前设备上下文的画笔为 pen,并将之前的画笔保存在 oldPen 中。这是为了在绘制完成后恢复原来的画笔
CPoint pt[3] = { CPoint(400,70),CPoint(800,70), CPoint(340,400) };//表示一个三角形的三个顶点坐标
dc.Polygon(pt, 3);// 使用 dc 绘制一个多边形,多边形的顶点由 pt 数组指

'CPen pen(PS_SOLID, 4, RGB(255, 182, 193))'

  • CPen是MFC中表示画笔的类。
  • PS_SOLID表示画笔风格为实线,4表示线宽,RGB(255, 182, 193)表示颜色为紫罗兰色。

实现效果如下
在这里插入图片描述

二、 绘制边框颜色渐变的三角形

使用 DrawLines 函数绘制了连接三个顶点的线条,从而形成了一个空心的三角形。画笔 Pen 使用渐变画刷作为颜色,实现了渐变色的效果.

GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;//标识符号
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
{// 创建 GDI+ 绘图对象Graphics graphics(GetSafeHwnd());// 定义三个渐变色Color color1(255, 255, 0);  // 黄色Color color2(0, 255, 255);  // 青色Color color3(255, 0, 255);  // 粉色// 创建渐变画笔LinearGradientBrush brush(Point(0, 0), Point(800, 400), color1, color2);REAL positions[] = { 0.0f, 1.0f };Color colors[] = { color1, color2 };brush.SetInterpolationColors(colors, positions, 2);// 创建画笔Pen pen(&brush, 3);// 定义三角形的三个顶点PointF points[4] = { PointF(400.0f, 100.0f), PointF(800.0f, 100.0f), PointF(400.0f, 400.0f), PointF(400.0f, 100.0f) };// 使用画笔绘制空心的渐变色边的三角形graphics.DrawLines(&pen, points, 4);}
// 关闭 GDI+
GdiplusShutdown(gdiplusToken);

补充说明

  • LinearGradientBrush:表示线性渐变画笔的类。
  • brush:创建的渐变画笔对象。

参数说明:

  • Point(0, 0):渐变的起始点,这里是窗口坐标 (0, 0)。
  • Point(800, 400):渐变的终止点,这里是窗口坐标 (800, 400)。
  • color1:起始颜色。
  • color2:终止颜色。

这段代码的作用是创建一个从起始点 (0, 0) 到终止点 (800, 400) 的线性渐变,颜色从 color1(起始颜色)变化到 color2(终止颜色)。这样的渐变将用于后续的绘图操作,例如在绘图对象上绘制形状时,形状的颜色将沿着这个线性渐变进行变化。

实现效果
在这里插入图片描述

三、 绘制填充渐变色三角形

使用 FillPolygon 函数绘制了一个填充的渐变色三角形。画刷 brush 使用LinearGradientBrush 实现了渐变色的效果,然后通过 FillPolygon 函数填充三角形

// 创建 GDI+ 绘图对象
Graphics graphics(GetSafeHwnd());// 定义三个渐变色
Color color1(255, 255, 0);  // 黄色
Color color2(0, 255, 255);  // 青色
Color color3(255, 0, 255);  // 粉色// 创建渐变画刷
LinearGradientBrush brush(Point(0, 0), Point(1000, 1000), color1, color2);REAL positions[] = {0.0f, 1.0f};
Color colors[] = {color1, color2};
brush.SetInterpolationColors(colors, positions, 2);// 定义三角形的三个顶点
PointF points[3] = {PointF(400.0f, 100.0f), PointF(800.0f, 100.0f), PointF(400.0f, 400.0f)};// 使用渐变画刷填充三角形
graphics.FillPolygon(&brush, points, 3);

实现效果如下
在这里插入图片描述

四、绘制渐变色边框正方形

如果你想绘制边框为渐变色的正方形,可以使用 DrawPolygon 函数,并指定 Pen 对象为渐变画笔。

// 创建 GDI+ 绘图对象
Graphics graphics(GetSafeHwnd());// 定义两个渐变色
Color color1(255, 0, 0);  // 红色
Color color2(0, 0, 255);  // 蓝色// 创建渐变画刷
LinearGradientBrush brush(Point(0, 0), Point(100, 100), color1, color2);REAL positions[] = {0.0f, 1.0f};
Color colors[] = {color1, color2};
brush.SetInterpolationColors(colors, positions, 2);// 定义正方形的四个顶点
PointF points[4] = {PointF(100.0f, 100.0f), PointF(200.0f, 100.0f), PointF(200.0f, 200.0f), PointF(100.0f, 200.0f)};// 创建渐变画笔
Pen gradientPen(&brush, 5.0f);  // 5.0f 是画笔的宽度// 使用渐变画笔绘制正方形的边框
graphics.DrawPolygon(&gradientPen, points, 4);

在这个例子中,我们使用 DrawPolygon 函数绘制了正方形的边框,并且使用 Pen 对象 gradientPen 设置了渐变画笔。 Pen 的构造函数接受一个 Brush 对象,这里我们使用 LinearGradientBrush 作为画笔的颜色。

实现效果图.

在这里插入图片描述

五、绘制渐变色填充正方形

要绘制一个填充的正方形,你可以使用 FillRectangle 函数。以下是一个示例代码片段:

// 创建 GDI+ 绘图对象
Graphics graphics(GetSafeHwnd());// 定义两个渐变色
Color color1(255, 0, 0);  // 红色
Color color2(0, 0, 255);  // 蓝色// 创建渐变画刷
LinearGradientBrush brush(Point(0, 0), Point(100, 100), color1, color2);REAL positions[] = {0.0f, 1.0f};
Color colors[] = {color1, color2};
brush.SetInterpolationColors(colors, positions, 2);// 定义正方形的位置和大小
RectF rectangle(100.0f, 100.0f, 100.0f, 100.0f);// 使用渐变画刷填充正方形
graphics.FillRectangle(&brush, rectangle);

在这个例子中,我们使用 FillRectangle 函数绘制了填充的正方形,并且使用 LinearGradientBrush 作为画刷的颜色。 Brush 的构造函数接受两个点,这里我们使用 Point(0, 0)Point(100, 100) 定义了一个渐变的范围。

实现效果图

在这里插入图片描述

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

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

相关文章

在Python中matplotlib函数的plt.plot()函数的颜色参数设置,以及可以直接运行的程序代码!

文章目录 前言一、使用字符串颜色:二、使用十六进制颜色:三、使用RGB元组:四、使用颜色映射:总结 前言 在matplotlib中,plt.plot()函数可以接受颜色参数,可以设置为字符串颜色(如red&#xff0…

瓶盖内的条码需要注意哪些?,才能帮助企业有效搭建与消费者沟通~

在不断发展的消费品领域,特别是饮料行业,组织不断寻求创造性的方法来扩大客户参与度、增强品牌忠诚度并消除假冒产品。一种获得认可的新兴方法是在瓶盖和瓶盖上实施DataMatrix 条形码扫描。这种创新方法提供了许多好处,从改善消费者互动到强化…

利用广度优先或模拟解决米诺骨牌

本周推荐阅读 C二分算法:得到子序列的最少操作次数 题目 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样…

Python基础教程:强大的Pandas数据分析库

Pandas是一个基于 NumPy 的非常强大的开源数据处理库,它提供了高效、灵活和丰富的数据结构和数据分析工具,当涉及到数据分析和处理时,使得数据清洗、转换、分析和可视化变得更加简单和高效。本文中,我们将学习如何使用Pandas来处理…

BEV+Transformer架构加速“上车”,智能驾驶市场变革开启

BEVTransformer成为了高阶智能驾驶领域最为火热的技术趋势。 近日,在2023年广州车展期间,不少车企及智能驾驶厂商都发布了BEVTransformer方案。其中,极越01已经实现了“BEVTransformer”的“纯视觉”方案的量产,成为国内唯一量产…

使用Pytorch从零开始构建Normalizing Flow

归一化流 (Normalizing Flow) (Rezende & Mohamed,2015)学习可逆映射 f : X → Z f: X \rightarrow Z f:X→Z, 在这里X是我们的数据分布,Z是选定的潜在分布。 归一化流是生成模型家族的一部分,其中包括变分自动编…

系列二十、Spring循环依赖问题

一、概述 循环依赖是指多个bean之间相互依赖,形成了一个闭环。比如A依赖于B、B依赖于C、C依赖于A,形成了一个圈,如: 二、循环依赖案例 2.1、构造方法注入产生循环依赖案例 2.1.1、ServiceA /*** Author : 一叶浮萍归大海* Date…

AntDB数据库,通信行业20年变迁的见证者

2000年至今,通信行业发展已过了20多年。面对通信行业巨大的数据信息,数据库在行业发展中发挥了巨大的作用,AntDB数据库便是其中较为知名的一款数据库。在通信行业快速发展的阶段,打破国外产品与技术垄断是产业发展的重点与难点。面…

处理分类问题的不平衡数据的 5 种技术

一、介绍 分类问题在机器学习领域很常见。正如我们所知,在分类问题中,我们试图通过研究输入数据或预测变量来预测类标签,其中目标或输出变量本质上是分类变量。 如果您已经处理过分类问题,那么您一定遇到过以下情况:其…

HTML5原生视频播放器组件video的videocontrolslist属性详解

HTML5提供了内置的视频播放控件,其中videocontrolslist是其中一个很有用的属性。videocontrolslist属性可以用于告诉浏览器在视频播放过程中应该显示哪些默认的用户界面控件。下面我们将从几个方面来介绍videocontrolslist的详细使用。 一、启用videocontrolslist videocont…

2024重庆大学计算机考研分析

24计算机考研|上岸指南 重庆大学 重庆大学计算机考研招生学院是计算机学院和大数据与软件学院。目前均已出拟录取名单。 重庆大学计算机学院是我国高校最早开展计算机研究的基地之一,1978年和1986年获西南地区首个硕士和博士点,1998年成立计算机学院&a…

单片机学习2——流水灯的实现

#include<reg52.h>sbit LED P1^0; unsigned char i;void main() {while(1){LED 0;for(i0;i<100;i);LED 1;for(i0;i<100;i);} } RST是复位按钮&#xff0c;单击一下之后&#xff0c;程序就会跑到最开始的位置运行。 右侧的按钮是RUN按钮&#xff0c;单击下&…

ShardingSphere-JDBC 入门教程(v4.1.1)

框架介绍 ShardingSphere-JDBC 定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库&#xff0c;以 jar 包形式提供服务&#xff0c;无需额外部署和依赖&#xff0c;可理解为增强版的 JDBC 驱动&#xff0c;完全兼容 JDBC 和各种 OR…

利用ogr2ogr从PostGIS中导出/导入Tab/Dxf/Geojson等格式数据

ogr2ogr Demo Command 先查看下当前gdal支持的全部格式&#xff0c;部分gdal版本可能不支持PostGIS。 如出现PostgreSQL表名支持。 #全部支持的格式 ogrinfo --formats | sort #AVCBin -vector- (rov): Arc/Info Binary Coverage #AVCE00 -vector- (rov): Arc/Info E00 (ASC…

数据结构——动态规划

动态规划&#xff1a;有很多重叠子问题&#xff0c;每一个状态一定是由上一个状态推导出来的 贪心&#xff1a;没有状态推导&#xff0c;而是从局部直接选最优的 动规五步曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 确定递推公式&#xff08;容…

STM32-SPI1控制AD7705(Sigma-Delta-ADC芯片)

STM32-SPI1控制AD7705&#xff08;Sigma-Delta-ADC芯片&#xff09; 原理图手册说明功能方框图引脚功能 片内寄存器通信寄存器&#xff08;RS2、RS1、RS00、0、0&#xff09;设置寄存器时钟寄存器数据寄存器&#xff08;RS2、RS1、RS00、1、1&#xff09;测试寄存器&#xff08…

SAP Smartforms设计

第八章 SMART FORMS设计 要点列表 概览&#xff1b; Form&#xff08;表格&#xff09;&#xff1b; Smart Styles&#xff08;样式&#xff09;&#xff1b; Text Module&#xff08;文本模块&#xff09;&#xff1b; 使用标准表方式打印&#xff1b; 使用模板方式打印…

淼一科技为互联网企业销毁硬盘数据 拆除机房设备

在上海这座繁华的大都市&#xff0c;淼一科技以其专业的服务和卓越的技术&#xff0c;为众多互联网企业提供硬盘数据销毁和机房设备拆除服务。作为业界领先的数据安全解决方案提供商&#xff0c;淼一科技致力于保障客户数据的安全与隐私&#xff0c;为客户创造更高的商业价值。…

uni-app:心跳机制基础逻辑(定时器方法解决)

思路 1、在登录的时候&#xff0c;定义一个存储当前时间的全局变量&#xff0c;并且开始心跳请求 2、在全局中定义一个定时器&#xff0c;该定时器每秒都会执行一次&#xff0c;并获取当前的时间 3、将定时器每秒的获取的当前时间和全局变量获取的时间进行比较 4、指定一个…

网络运维与网络安全 学习笔记2023.11.27

网络运维与网络安全 学习笔记 第二十八天 今日目标 OSPF基本原理、OSPF单区域配置、OSPF多区域配置 特殊区域之Stub、特殊区域之NSSA OSPF基本原理 项目背景 随着企业的发展&#xff0c;网络的规模越来越大&#xff0c;网段的数量越来越多&#xff0c;公司内部的路由器的…