当前位置: 首页 > news >正文

MFC第二十三天 HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体

文章目录

  • HBrush对闭合图形的填充
  • HBITMAP位图资源的加载和平铺填充
  • CFont类常用功能与LOGFONT结构体
  • CPen类简介

HBrush对闭合图形的填充

HBRUSH创建:
a)实色填充:

HBRUSH CreateSolidBrush( COLORREF color);

b)栅格线填充:

HBRUSH CreateHatchBrush( int iHatch, COLORREF color);

c)平铺图填充:

HBRUSH CreatePatternBrush( HBITMAP hbm);
HBITMAP hBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_LOGO));

d)空填充:可以创建前三种任何一种,也可以创建第四种(空中)

HBRUSH CreateBrushIndirect(  [in] const LOGBRUSH *plbrush);

对应的CBrush

CBrush::CreateBrushIndirectInitializes a brush with the style, color, and pattern specified in a LOGBRUSH structure.CBrush::CreateDIBPatternBrushInitializes a brush with a pattern specified by a device-independent bitmap (DIB).CBrush::CreateHatchBrush //Initializes a brush with the specified hatched pattern and color.
CBrush::CreatePatternBrush	//Initializes a brush with a pattern specified by a bitmap 图片
CBrush::CreateSolidBrush	// Initializes a brush with the specified solid color. 实色
CBrush::CreateSysColorBrush		// Creates a brush that is the default system color.CBrush::FromHandleReturns a pointer to a CBrush object when given a handle to a Windows HBRUSH object.CBrush::GetLogBrush		// Gets a LOGBRUSH structure.
 /* Hatch Styles */  填充风格
#define HS_HORIZONTAL       0       /* ----- */
#define HS_VERTICAL         1       /* ||||| */
#define HS_FDIAGONAL        2       /* \\\\\ */
#define HS_BDIAGONAL        3       /* / */
#define HS_CROSS            4       /* +++++ */
#define HS_DIAGCROSS        5       /* xxxxx */
#define HS_API_MAX          12
typedef struct tagLOGBRUSH {UINT      lbStyle;COLORREF  lbColor;ULONG_PTR lbHatch;
} LOGBRUSH, *PLOGBRUSH, *NPLOGBRUSH, *LPLOGBRUSH;
	CBrush br1;br1.CreateSolidBrush(0xffff00); //纯色填充dc.SelectObject(&br1);dc.SelectObject(&pOldPen); //默认pen 接近0的黑色dc.Pie(296, 80, 800, 400, 600, 134, 600, 400);LOGBRUSH lb{ BS_NULL };CBrush br3;br3.CreateBrushIndirect(&lb);dc.SelectObject(&br3);POINT pts[] = { {40,200},{130,30},{300,250},{150,300} };dc.Polygon(pts, _countof(pts));

HBITMAP位图资源的加载和平铺填充

	CBitmap bitmap;bitmap.LoadBitmap(IDB_LOGO);CBrush br;br.CreatePatternBrush(&bitmap);   dc.SelectObject(&br);dc.Rectangle(rect.left, rect.top, rect.right, rect.bottom);

CFont类常用功能与LOGFONT结构体

CFont类的主要函数:
a)CFont::CreateFont:参数太多没法用
b)使用结构体创建比较方便:

BOOL CreateFontIndirect( const LOGFONT* lpLogFont );

c)GetLogFont:获取字体信息,是以上函数的反函数。
d)简易创建函数:他的大小是以上函数的十分之一,所以调用时要乘以10。

CreateFont和CreateFontIndirect中间加Point。Requested font height in tenths of a point. (For instance, pass 120 to request a 12-point font.)
typedef struct tagLOGFONT { LONG lfHeight;   LONG lfWidth; LONG lfEscapement;  //书写角度LONG lfOrientation; 	//基线角度LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut;  //删除线BYTE lfCharSet;  //字符集表示 BYTE lfOutPrecision; //输出精度BYTE lfClipPrecision; //剪辑精度BYTE lfQuality; //字体质量BYTE lfPitchAndFamily; //字体的字符间距和族标识TCHAR lfFaceName[LF_FACESIZE]; //字体名称
} LOGFONT;
	CFont font;//font.CreatePointFont(100 * 3 / 2, _T("黑体"));  //简易函数LOGFONT lf{ 15 * 3 / 2 };lf.lfItalic = TRUE;lf.lfWeight = 700;lf.lfCharSet = GB2312_CHARSET;lf.lfEscapement = 200;_tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("黑体"));font.CreateFontIndirect(&lf);auto pOldFont = dc.SelectObject(&font);//dc.SetBkMode(TRANSPARENT); //设置文字的透明色 //真透明 	//dc.SetTextColor(0xff);dc.SetBkColor(0xffff00); //假透明dc.DrawText(_T("这世间本没有佛"), rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);pOldFont->GetLogFont(&lf);

CPen类简介

CPen::CreatePen
Creates a logical cosmetic or geometric pen with the specified style, width,and brush attributes, and attaches it to the CPen object.CPen::CreatePenIndirectCreates a pen with the style, width, and color given in a LOGPEN structure,and attaches it to the CPen object.CPen::FromHandle    //Returns a pointer to a CPen object when given a Windows HPEN.
CPen::GetExtLogPen	//Gets an EXTLOGPEN underlying structure.
CPen::GetLogPen		//Gets a LOGPEN underlying structure. 
CPen::operator HPEN		//Returns the Windows handle attached to the CPen object.
/* Pen Styles */
#define PS_SOLID            0						实线
#define PS_DASH             1       /* -------  */  破折线	
#define PS_DOT              2       /* .......  */ 
#define PS_DASHDOT          3       /* _._._._  */ 点划线
#define PS_DASHDOTDOT       4       /* _.._.._  */双点划线
#define PS_NULL             5					  无线条
typedef struct tagLOGPEN {UINT  lopnStyle;   // 线条样式POINT lopnWidth;   // 线条宽度COLORREF lopnColor;   // 线条颜色
} LOGPEN, *PLOGPEN
	CRect rect;GetClientRect(&rect);CPen pen;  //用来绘制边框的pen.CreatePen(PS_SOLID, 5, RGB(0, 255, 255));auto pOldPen = dc.SelectObject(&pen); //返回之前选入的画笔的句柄//绘图操作结束后,会使用SelectObject函数将之前的画笔 重新选入 DC,以保证 DC 的状态不受影响LOGPEN logPen;GetObject(pOldPen->GetSafeHandle(), sizeof(logPen), &logPen);CPen p2;p2.CreatePen(PS_DOT, 1, 0xff00);dc.SelectObject(&p2); dc.MoveTo(594, 31);dc.LineTo((196 + 710) / 2, (72 + 301) / 2);dc.LineTo(517, 414);

相关文章:

MFC第二十三天 HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体

文章目录 HBrush对闭合图形的填充HBITMAP位图资源的加载和平铺填充CFont类常用功能与LOGFONT结构体CPen类简介 HBrush对闭合图形的填充 HBRUSH创建: a)实色填充: HBRUSH CreateSolidBrush( COLORREF color);b)栅格线填充: HBRUSH CreateHa…...

深入学习 Redis - 渐进式遍历 scan 命令、数据库管理命令

目录 前言 一、scan 命令 二、数据库管理命令 select dbsize flushdb / flushall 前言 之前我们所了解到的 keys * 是一次性把整个 redis 中所有的 key 都获取到,但是整个操作比较危险,可能会一下子的都太多的 key,阻塞 redis 服务器. …...

python+opencv实现显示摄像头,截取相关图片,录取相关视频

实时显示摄像头图像 按下空格键,截取图片 按下tab键,开始录制摄像内容,再次按下,结束录制 按下Esc键,关闭窗口 import cv2 import numpy#第几章图片 img_count0InitVideoFalse #第几个视频 video_count0 video_flagFa…...

第十章:重新审视扩张卷积:一种用于弱监督和半监督语义分割的简单方法

0.摘要 尽管取得了显著的进展,弱监督分割方法仍然不如完全监督方法。我们观察到性能差距主要来自于它们在从图像级别监督中学习生成高质量的密集目标定位图的能力有限。为了缓解这样的差距,我们重新审视了扩张卷积[1]并揭示了它如何以一种新颖的方式被用…...

指令收集:DOCKER+K8S

docker 1.镜像指令:docker images 1、docker images : 列出本地主机上的镜像OPTION字段说明: -a 列出所有本地镜像, -q 只显示镜像ID2、docker search 某个镜像名字 : 查找某个镜像加上 --limit 5 redis&#xff…...

Minecraft 1.20.x Forge模组开发 05.矿石生成

我们本次尝试在主世界生成模组中自定义的矿石 效果演示 效果演示 效果演示 1.由于1.20的版本出现了深板岩层的矿石,我们要在BlockInit类中声明一个矿石的两种岩层形态: BlockInit.java package com.joy187.re8joymod.init;import java.util.function.Function;import java…...

运维面试大全

文章目录 第一阶段你是用过哪些Linux命令Linux 系统安全优化与内核优化经常使用shell脚本做什么软连接与硬链接的区别怎么查看文件IOS七层模型三次握手与四次挥手lvm 逻辑卷创建过程磁盘配额raid 磁盘阵列文本三剑客防火墙iptables与firewardLinux系统资源查询命令日志的八大等…...

【线程安全的讨论(一)】CPU多核缓存架构和JMM

CPU多核缓存架构 一、CPU多核缓存架构可见性问题乱序执行(指令重排) 二、JMM——Java内存模型 一、CPU多核缓存架构 计算机的基本组成图 CPU 缓存为了提高程序运行的性能,现代 CPU 在很多方面会对程序进行优化。CPU 的处理速度很快&#xf…...

以太网交换机的生成树协议STP

概述 网络环路带来的问题 广播风暴 广播帧在各个交换机之间反复转发,分别按顺时针和逆时针方向不停的同时兜圈。广播风暴会大量消耗网络资源,使得网络无法正常转发其他数据帧。 主机收到反复的广播帧,会大量消耗主机的资源。交换机的帧交换…...

手机照片转换成pdf怎么做?了解这几种方法就可以了

手机照片转换成pdf怎么做?转换照片为PDF的需求在日常生活中很常见。无论是收集有关旅行、家庭或工作的照片,将它们组织成一个PDF文件可以更方便地分享给朋友或同事。那么下面就给大家分享几个手机照片转换成pdf的方法。 虽然有多种软件和工具可以将照片转…...

跨境电商还有人在做吗,这十大选品技巧建议收藏!

随着电商的快速发展,无论国内或者国外电商,竞争都比较激烈,很多人觉得现在入行太晚了,玩不过那些老卖家。 不过我想说的是:做电商很重要的一点就是选品,那些很早一批老卖家可能也是借着红利期走过来的&…...

HTML快速学习

目录 一、网页元素属性 1.全局属性 2.标签 2.1其他标签 2.2表单标签 2.3图像标签 2.4列表标签 2.5表格标签 2.6文本标签 二、编码 1.字符的数字表示法 2.字符的实体表示法 三、实践一下 一、网页元素属性 1.全局属性 id属性是元素在网页内的唯一标识符。 class…...

centos7搭建k8s环境并部署springboot项目

之前看了很多文章,都是部署后一直报错,百度解决后下次又忘了,这次决定把从头到尾的过程记录下来方便下次再看,部署参考文章尚硅谷Kubernetes(k8s)视频学习笔记_尚硅谷k8s笔记_溯光旅者的博客-CSDN博客 1、…...

nuitka打包软件程序

将python代码打包成exe桌面程序 1、打包参数含义 """-–mingw64 默认为已经安装的visio stdio去编译-–standalone 独立环境,这是必须的(否则拷给别人无法使用)-–windows-disable-console 没有CMD控制窗口-–output-dirout 生成exe到out文件夹下面…...

12-3_Qt 5.9 C++开发指南_创建和使用静态链接库

第12章中的静态链接库和动态链接库介绍,都是以UI操作的方式进行,真正在实践中,可以参考UI操作产生的代码来实现同样的功能。 文章目录 1. 创建静态链接库1.1 创建静态链接库过程1.2 静态链接库代码1.2.1 静态链接库可视化UI设计框架1.2.2 qw…...

conda模式安装paddlepaddle2.4.2版本

conda模式安装paddlepaddle2.4.2版本 一、下载anaconda 2022.10 window-x86-x64.exe 清华镜像源Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,进去后根据自己的需要选择对应的版本下载 下载安装到磁盘空闲空间要大的D:\Pr…...

英语疑问句

文章目录 一般疑问句特殊疑问句 一般疑问句 英语肯定句怎么改成一般疑问句? 1.假如句子中有"情态动词、助动词、be动词"则直接提前。2.假如句子,只有实义动词,就要借助"do,does,did"放在句子前面,并将实义动词改为"…...

k8s证书更新,kubeadm安装的K8S证书过期后无法使用后证书更新方法

k8s证书更新 1. 查看证书过期时间 #通过文件查看证书过期时间 for item in find /etc/kubernetes/pki -maxdepth 2 -name "*.crt";do openssl x509 -in $item -text -noout| grep Not;echo $item;done #通过命令查看证书过期时间 kubeadm certs check-expirationk8…...

java实现日期拆分的方法

java实现日期拆分的方法 本文实例讲述了java实现日期拆分的方法。分享给大家供大家参考。具体如下: 如:计算6-1至6-5之间的日期天数及具体日期,预期的结果是得到: 6-1 6-2 6-3 6-4 6-5 以下是我利用java 日历类做的实现&am…...

Ansible之playbook剧本编写

一、playbook的相关知识 1.playbook简介 playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复…...

【ChatGPT辅助学Rust | 基础系列 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一,创建项目二,两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时,都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中,将会介绍如何在Rust中编写并运…...

自监督去噪:Noise2Noise原理及实现(Pytorch)

文章地址:https://arxiv.org/abs/1803.04189 ICML github 代码: https://github.com/NVlabs/noise2noise 本文整理和参考代码: https://github.com/shivamsaboo17/Deep-Restore-PyTorch 文章目录 1. 理论背景2. 实验结果3. 代码实现(1) 网络结构(2) 数据加载(3) 网络…...

BES2700 SDK绝对时间获取方法

1 代码 2 实验 log 需要换算下...

Closure Table-树形多级关系数据库设计(MySql)

一般树形多级关系数据库设计,比较普遍的就是四种方法:(具体见 SQL Anti-patterns这本书) Adjacency List:每一条记录存parent_id Path Enumerations:每一条记录存整个tree path经过的node枚举&#xff08…...

【SQL应知应会】表分区(一)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 分区表 • MySQL版 一、分区表1.非分区表2.分区表2…...

java语法基础-- 变量、标识符、关键字

学习目标 教学目标重点难点1.掌握变量的相关概念。2.掌握Java中数据类型的划分。3.掌握8种基本数据类型的使用。4.掌握数据类型的转换方式。5.掌握各个运算符,表达式的作用。6.可以编写简单的Java应用程序。1.对变量的理解。2.基本数据类型的相关信息的记忆。3.数据…...

[STL]stack和queue模拟实现

[STL]stack和queue模拟实现 文章目录 [STL]stack和queue模拟实现stack模拟实现queue模拟实现 stack模拟实现 stack是一种容器适配器,标准容器vector、deque、list都可以作为实现stack的底层数据结构,因为它们都具备以下功能: empty&#xf…...

汽车销售企业消费税,增值税高怎么合理解决?

《税筹顾问》专注于园区招商、企业税务筹划,合理合规助力企业节税! 汽车行业一直处于炙手可热的阶段,这是因为个人或者家庭用车的需求在不断攀升,同时随着新能源的技术进一步应用到汽车领域,一度实现了汽车销量的翻倍。…...

flask数据库操作

本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高…...

【C++】 哈希

一、哈希的概念及其性质 1.哈希概念 在顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。比如顺序表需要从第一个元素依次向后进行查找,顺序查找时间复杂度为…...