windows文本绘制 TextOut、DrawText、CreateFont、SetTextColor、SetBkColor、SetBkMode

news2025/7/20 20:51:12

文本绘制
TextOut-将文字绘制在指定坐标位置
DrawText-在矩形区域绘制字符串

int DrawText(
	HDC hdc, //DC句柄
	LPCSTR lpString, //字符串
	int nCount, //字符串长度
	LPRECT lpRect, //绘制文字的矩形框
	UINT uFormat //绘制的方式,重点,花样繁多的关键点
);

绘制文字样式简单说明

/*
 * DrawText() Format Flags
 */
#define DT_TOP                      0x00000000 //靠顶部
#define DT_LEFT                     0x00000000 //靠左
#define DT_CENTER                   0x00000001 //水平中间显示
#define DT_RIGHT                    0x00000002 //水平靠右
#define DT_VCENTER                  0x00000004 //垂直中间显示
#define DT_BOTTOM                   0x00000008 //靠底部显示
#define DT_WORDBREAK                0x00000010 //换行,多行显示,一行满了下一行显示
#define DT_SINGLELINE               0x00000020 //单行显示
#define DT_EXPANDTABS               0x00000040
#define DT_TABSTOP                  0x00000080
#define DT_NOCLIP                   0x00000100 //不裁切,即便显示不下也继续显示
#define DT_EXTERNALLEADING          0x00000200
#define DT_CALCRECT                 0x00000400
#define DT_NOPREFIX                 0x00000800
#define DT_INTERNAL                 0x00001000

文字颜色和背景
文字颜色:SetTextColor
文字背景色:SetBkColor 只适合OPAQUE模式下才会生效
文字背景模式:SetBkMode(OPAQUE/TRANSPARENT)

/* Background Modes */
#define TRANSPARENT         1 //透明
#define OPAQUE              2 //非透明
#define BKMODE_LAST         2

字体
字体相关
Windows常用的字体为TrueType格式的字体文件
TrutType:每个字体的点阵字形保存每一个字的真实外观
字体名-标识字体名称
HFONT-字体句柄
字体的使用
1.创建字体
CreateFont函数
HFONT CreateFont(
int nHeigth,//字体高度
int nWidth, //字体宽度
int nEscapement, //字符串倾斜角度
int Orientation, //字符旋转角度
int fnWeight, //字体粗细
DWORD fdwItalic,//斜体
DWORD fdwUnderline,// 字符下划线
DWORD fdwStrikeOut,//字体删除线
DWORD fdwCharSet,//字符集
DWORD fdwOutPutPrecision,//输出精度(基本已废弃参数)
DWORD fdwClipPrecision,//剪切精度(基本已废弃参数)
DWORD fdwQuality,//输出质量(基本已废弃参数)
DWORD fdwPitchAndFamily,//匹配字体(基本已废弃参数)
LPCTSTR lpszFace //字体名称
); //返回创建的文件句柄
//windows定义CreateFont

WINAPI CreateFontW( 
__in int cHeight, 
__in int cWidth, 
__in int cEscapement, 
__in int cOrientation, 
__in int cWeight, 
__in DWORD bItalic,                             
__in DWORD bUnderline, 
__in DWORD bStrikeOut, 
__in DWORD iCharSet, 
__in DWORD iOutPrecision, 
__in DWORD iClipPrecision,                             
__in DWORD iQuality, 
__in DWORD iPitchAndFamily, 
__in_opt LPCWSTR pszFaceName
);

2.应用字体到DC
SelectObject
3.绘制文字
DrawText、TextOut
4.取出字体,把系统字体还回去
SelectObject
5.删除字体,释放资源
DeleteObject

void DrawText(HDC hdc,int x,int y)
{
	TCHAR szTextOut[STRMAX256];
	TCHAR szDrawText[STRMAX256];
	RECT rect = {0,100,500,200};
	LoadString(g_hInstance,IDS_szTextOut,szTextOut,STRMAX256);
	LoadString(g_hInstance,IDS_szDrawText,szDrawText,STRMAX256);
	TextOut(hdc,x,y,szTextOut,lstrlen(szTextOut));
	//矩形区域显示出来
	Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
	//修改颜色
	SetTextColor(hdc,RGB(255,0,255)); //设置字体颜色
	SetBkColor(hdc,RGB(0,255,255)); //设置背景色
	SetBkMode(hdc,OPAQUE); //非透明模式
	SetBkMode(hdc,TRANSPARENT); //透明模式
	//1.创建字体
	HFONT hFont = CreateFont(30, //设置宽度30
							 0, //设置0时,按汉字系统默认的宽度给一个值
							 45,0,
							 900, //字体粗细900是默认,也不是一个很粗的值
							 1,
							 1,
							 GB2312_CHARSET, //国标
							 0,0,0,0,0,
							 "黑体");
	//2.设置字体
	HGDIOBJ hOldGdiobj = SelectObject(hdc,(HGDIOBJ)hFont);
	//3.画字体
	DrawText(hdc,szDrawText,lstrlen(szDrawText),&rect,DT_LEFT|DT_TOP|DT_WORDBREAK|DT_NOCLIP);
	//4.把旧的字体还回系统
	SelectObject(hdc,hOldGdiobj);
	//5.删除字体句柄
	DeleteObject(hOldGdiobj);
}

在这里插入图片描述

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

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

相关文章

持续集成和上传源码

1.测试左移,测试右移 2.持续集成 是指通过自动化的方式,频繁多次将代码集成到主干。 快速发现错误 每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。 防止分支大幅偏离主干 如果不是经常集成&…

nginx源码分析--双端列表

1.基本数据结构 struct ngx_queue_s {ngx_queue_t *prev;ngx_queue_t *next; };结构成员: ngx_queue_t *prev;前驱指针 ngx_queue_t *next;后继指针 2.操作函数--头结点 2.1基本函数 define ngx_queue_init(q) \(…

七牛云 vue 图片上传简单解说,js 上传文件图片

七牛云 vue 图片上传简单解说,js 上传文件图片 一、七牛云简介 首次使用七牛云存储进行项目的图片存储,整了一上午才整明白,这些官方的教程把明白人也给说糊涂了,文档很不规范。 七牛云有免费的使用额度,https://ww…

[附源码]SSM计算机毕业设计汽车租赁管理系统-JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Go学习之旅:包、变量和函数(DAY 1)

文章目录前引包、变量和函数1、包的概念和所用2、导出名或者导出函数3.1、函数参数声明方式(一)3.2、函数参数声明方式(二)4、函数返回值支持多值返回5、函数命名返回值6、变量声明7、变量的基础类型8、变量的默认值(零…

pytorch案例代码-3

双向循环神经网络 双向循环神经网络在RNN/LSTM/GRU里都有。比如RNN cell,只是把h0和x1传入做线性变换产生h1继续传入同一个cell做线性变换,线性变换的W和b共享,沿着这个方向就把所有隐层和最后的输出算出来了。 那么其中的每个结点&#xff0…

android-apk解包打包

title: android-apk解包打包 categories: Android tags: [android, 加壳] date: 2022-09-28 10:29:51 comments: false mathjax: true toc: true android-apk解包打包, 以下所有操作都需要在配置好 java 环境下进行 前篇 android apk解包和打包 - https://blog.csdn.net/u0114…

(十五)Spring之面向切面编程AOP

文章目录基础环境AOP介绍AOP的七大术语切点表达式Spring的AOP的使用环境准备基于AspectJ的AOP注解式开发通知类型前置通知Before后置通知AfterReturning环绕通知Around异常通知AfterThrowing最终通知After关于JoinPoint切面的先后顺序通用切点表达式全注解式开发AOP基于XML配置…

9、前端笔记-CSS-CSS三大特性

三大特性:层叠性、继承性、优先级 1、层叠性(覆盖性) 给相同的选择器设置相同的样式,此时一个样式会覆盖(层叠)其他冲突的样式。 层叠性原则: 同一选择器,样式冲突,遵…

【SpringBoot】MVC配置解决跨域但仍然存在跨域

文章目录1. 跨域问题出现与解决1. 跨域问题出现与解决 检查SpringBoot中的MVC配置。 public void addCorsMappings(CorsRegistry registry) {//允许跨域访问资源定义registry.addMapping("/**")//(只允许本地的指定端口访问)允许所有.allowedOrigins("*")…

数据结构之线性表中的单链表【详解】

文章目录前言:一、单链表1.单链表和顺序表的优缺点2.单链表的概念和学习3.单链表的各个接口的实现(详解每一步)3.1.先铺垫一下大致的思路3.2.然后这边我们看一下我们大致要实现的函数有哪些3.3.接下来我们就开始实现这些代码,并且…

用信号量实现进程同步与互斥(含代码分析)

信号量简单的来说就是一个变量,代表着系统中互斥资源的数量,通常用原语来实现对信号量机制的操作。 一对原语:wait(S)也称为P操作,singnal(S)也称为V操作。S表示信号量 对于wait原语本身的内部逻辑代码如下(这里以一…

黑苹果外接显示器最优解决方案

黑苹果无法外接显示器 黑苹果外接显示器解决方案 先给解决方案 电脑端 > 安装 PC端 Duet Display买个二手电视盒子40块钱左右,还带电源电视盒子 > 安装安卓端 Duet Display(U盘安装就行)电视盒子 > 用鼠标开启开发者模式双头USB&…

SpringBoot SpringBoot 原理篇 1 自动配置 1.12 bean 的加载控制【注解式】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.12 bean 的加载控制【注解式】1.12.1 问题引入1.12.2 bean的加载…

【JVM技术专题】「原理专题」全流程分析Java对象的创建过程及内存布局

前言概要 对应过程则是:对象创建、对象内存布局、对象访问定位的三个过程。 对象的创建过程 对象的创建方式 java中对象的创建方式有很多种,常见的是通过new关键字和反射这两种方式来创建。除此之外,还有clone、反序列化等方式创建。 通过n…

CSS @property,让不可能变可能

本文主要讲讲 CSS 非常新的一个特性,CSS property,它的出现,极大的增强的 CSS 的能力! 根据 MDN -- CSS Property,property CSS at-rule 是 CSS Houdini API 的一部分, 它允许开发者显式地定义他们的 CSS 自定义属性&…

vue项目分环境配置打包处理

vue项目分环境配置打包处理 目录 vue项目分环境配置打包处理 本地环境配置 生产环境配置 打包处理 打包配置处理(扩展) 本地环境配置 定义需要的变量,这里定义了各种变量标识,可参考使用,自定义项目需要的变量&…

设计问卷调查有哪些技巧?

调查问卷可以很好地帮助我们进行市场调研,所以想要做出一份有效的调查问卷,首先要确定问卷的主题。明确的主题就是定基调,可以让我们的后续过程更加顺利。然后我们再开始进行题目的设置和问卷的设计等动作。不过,在问卷设计的过程…

【js】【爬虫】fetch + sessionStorage 快速搭建爬虫环境及各种踩坑

文章目录导读需求开发环境fetch介绍为什么选择fetchfetch的封装使用数据存储数据访问封装多页面处理方案数据过大,拆分处理参考资料导读 需求 一说爬虫,很多人都会向导python,不过,真正省心的方案,应当是通过js控制获…

Reactive源码分析

Reactive用来绑定引用数据类型, 例如对象和数组等,实现响应式。 Reactive API 接口 export function reactive<T extends object>(target: T): UnwrapNestedRefs<T>相关API包括readonly、createReactiveObject、shallowReadonly、isReactive、toReactive。源码运…