[GDI绘图]画笔CPen

  1. CPen类
CPen画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。

CPen类,该类封装了Windows图形设备接口(GDI)画笔,主要通过构造函数来创建绘图对象。

  1. 函数说明

CPen类的构造函数有3个,分别如下:

// Create methods
HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor)
HPEN CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL)
HPEN CreatePenIndirect(LPLOGPEN lpLogPen)

HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor)

创建画笔函数带有3个参数,nPenStyle设置线形,nWidth设置线宽,crColor设置线的颜色

画笔线型参数说明
参数注释
PS_SOLID实线画笔
PS_DASH虚线画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_DOT点画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_DASHDOT虚线点画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_DASHDOTDOT创建一个双点线画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_NULL空线画笔
PS_INSIDEFRAME创建一个内框线画笔,该画笔可以在Windows GDI输出函数定义的矩形边界所生成的封闭状的边框内绘制直线
// 创建实线画笔
CPen solidPen;
solidPen.CreatePen(PS_SOLID, 1, RGB(0x99, 0x99, 0x99));
// 绘制一条直线
HGDIOBJ hOld = ::SelectObject(hDC, (HGDIOBJ)solidPen);
::MoveToEx(hDC, 0, 0, nullptr);
::LineTo(hDC, 100, 100);
::SelectObject(hDC, hOld);

// 创建虚线画笔
 CPen dotPen;
 dotPen.CreatePen(PS_DOT, 1, RGB(0xCC, 0xCC, 0xCC));
 dc.SelectPen(dotPen);
// ToDo: 绘制形状

HPEN CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL)

创建画笔函数带有5个参数,nPenStyle设置线形,nWidth设置线宽,pLogBrush设置画刷,nStyleCount指定lpStyle矩阵的长度(如果参数nPenStyle的值不是PS_USRSTYLE,则该参数值必须是0),lpStyle设置自定义风格直线段的长度

// 设置一个宽度为2,实线和白线分别是32和8,的虚线矩形画刷
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;              // 线的类型
logBrush.lbColor = RGB(0xCC, 0xCC, 0xCC); // 线的颜色
DWORD lpStyle[] = { 32, 8, 0};            // 虚线和白线比例,也可以多设置几个
CPen pen;
pen.CreatePen(PS_USERSTYLE | PS_GEOMETRIC | PS_ENDCAP_SQUARE, 2, &logBrush, 2, lpStyle);

// 绘制一条宽度为2的虚线
HGDIOBJ hOld = ::SelectObject(hDC, (HGDIOBJ)pen);
::MoveToEx(hDC, 0, 0, nullptr);
::LineTo(hDC, 100, 100);
::SelectObject(hDC, hOld);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

比 style gan 更好的 style gan2

上一篇博客介绍了style gan 原理,但是 style gan 的结果会有水珠伪影,作者实验后发现是 Adain 导致的,AdaIN对每一个feature map的通道进行归一化,这样可能破坏掉feature之间的信息。当然实验证明发现,去除AdaIN的归一…

连接SSH报错 / 连接容器SSH

连接SSH报错 / 连接容器SSH 前言被控端主控端连接失败 前言 本文介绍如何通过SSH方式远程连接Linux被控端,并介绍如何解决连接失败问题。 此方法同样适用于SSH连接Docker容器。 被控端 被控端一般为Linux,默认已安装ssh,但需要手动安装ope…

复杂 SQL 实现分组分情况分页查询

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、根据 camp_status 字段分为 6 种情况 1.1 SQL语句 1.2 SQL解释 二、分页 SQL 实现 2.1 SQL语句 2.2 根据 camp_type 区分返…

[Verilog] Verilog 数据类型

主页: 元存储博客 文章目录 前言1. bit 类型2. reg 类型3 wire类型4 integer类型5 real类型6 parameter类型7 enum类型8 array 类型9 向量类型10 time 类型11 string 类型 前言 在 Verilog 中,有几种不同的数据类型可以用于声明和操作变量。 在 Verilo…

【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse,详解如何创建一个ArgumentParser对象及使用 一. argparse介绍二. 使用步骤及参数介绍三. 具体使用3.1 设置必需参数3.2 传一个参数3.3 传多个参数3.4 位置参数和可选参数3.5 参数设置默认值3.6 其它用法 一. argparse介绍 很多时候&#xff…

遇见小黄鸭——一年开出两千多家门店,疑似员工维权,拖欠薪资?

遇见小黄鸭 遇见小黄鸭(重庆)食品有限公司成立于2021年10月12日,注册地位于重庆市渝中区 法定代表人为袁林 实际隶属于重庆中润天泽科技(集团)有限公司 实体业崛起? 经过三年疫情的冲刷,实体…

亚信安慧AntDB:支撑中国广电5G业务的数据库之力

自2019年6月获得5G牌照以来,中国广电积极利用700MHz频谱资源,迅速崛起为第四大运营商,标志着其在数字通信领域取得的巨大成就。通过与中国移动紧密合作,共建共享基站已超过400万座,为实现自主运营和差异化竞争提供了坚…

游戏引擎?

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、…

【诊断】linux系统下的内存溢出问题定位

步骤: (1)编写并运行一个会造成内存溢出的代码: import java.util.HashMap; import java.util.concurrent.atomic.AtomicInteger;public class HeapLeakTest {static AtomicInteger i new AtomicInteger(1);public static void …

202. 快乐数(快慢指针)

对于任意n,可能出现以下几种情况: 最终会得到 1。 最终会进入循环。 值会越来越大,最后接近无穷大。 对于第三种情况,我们可以简单的列举一下: 会发现,13位数字的数位平方和最大是1053,1…

LeetCode刷题--- 子集

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题【 http://t.csdnimg.cn/yUl2I 】【C】 【 http://t.csdnimg.cn/6AbpV 】数据结构与算法【 http://t.csdnimg.cn/hKh2l 】 前言:这个专栏主要讲…

多对多关系通用操作组件,省时省力的神器

项目上有很多对多操作的场景,建对象,建mapper接口,设置查询条件,查询多对多数据等都是一项极为耗时耗力的工作。因此,搓了这款集建表-保存-查询-设置条件等操作于一体的组件。原理简单,利用$标签动态作些操…

25.BFD双向转发检查

BFD双向转发检查 链路故障检测工具,结合三层协议使故障检测更加快速 例如两台路由器之间加了一台二层设备 在修改优先级后,默认选择了下面那条优先级高的路由,R1 ping R2的时候是正常能ping通的 但是,当下面的路由出现故障后&a…

基于SpringBoot实现的社区人员管理系统

一、系统架构 前端:html | js | css | layui 后端:springboot | mybaits-plus | shiro 环境:jdk1.8 | mysql8 | maven 二、代码及数据库 三、功能介绍 01. 登录 02. 首页 03. 常规管理-住户模块-住户管理 04. 常规管理-住户模块-高危…

DevEco Studio Preview失败

安装DevEco Studio新建第一个项目后,点击Previewer预览失败,Preview failed Unable to start the previewer. Open PreviewerLog to check for details。 点击File->Settings->Build, Execution, Deployment->Build Tools->Hvigor&#xff…

音视频直播核心技术介绍

直播流程 采集: 是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。 前处理:主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

任意文件下载漏洞的利用思考

0x01 前言 任意文件下载漏洞作为最常见的WEB漏洞之一,在平常的渗透测试中经常遇到,但是很多人却并没有深入去想该如何利用这种漏洞,导致忽略了一些细节的信息。 0x02 传统利用 1) 下载配置文件连数据库 通过任意文件下载漏洞下载网…

翻译: LLMs关于人工智能的担忧 Concerns about AI

在短时间内,获取生成人工智能的能力已经在全球范围内传播,使许多人能够生成高质量的文章、图片和音频。随着这些惊人的能力的出现,也带来了许多关于人工智能的担忧。我认为即使在生成人工智能兴起之前,我们就已经生活在许多焦虑之…

charles和谷歌浏览器在Mac上进行软件安装,桌面上会显示一个虚拟磁盘,关掉页面推出磁盘内容都消失掉了 需要再次安装问题解决

其他软件也会有这种情况,这里我们以charles为例。绿色背景的内容是重点步骤。 1.如图,我下载了一个charles一个版本的dmg文件。 2.打开后,选择Agree 3.桌面会出现一个磁盘和如下页面 4.错误操作------可以不看 直接看第5步正确操作 常规情…

为什么GRU和LSTM能够缓解梯度消失或梯度爆炸问题?

1、什么是梯度消失(gradient vanishing)? 参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。 2、什么是梯度爆炸(gradient exploding)? 参数更新过小大,破坏了…
最新文章