easyX库文字输出相关函数(注释版)

news2024/11/15 23:55:06

您好这里是limou3434的博文系列,感兴趣的话可以看看我的其他系列。

本次我给您带来的是easyX库的字符输出系列函数,祝您看得开心。

0.文字输出函数概览

函数或数据类型描述
LOGFONT文字样式的结构体。
settextcolor设置当前文字颜色。
settextstyle设置当前文字样式。
outtextxy在指定位置输出字符串。
gettextcolor获取当前文字颜色。
gettextstyle获取当前文字样式。
textheight获取字符串实际占用的像素高度。
textwidth获取字符串实际占用的像素宽度。
drawtext在指定区域内以指定格式输出字符串。

1.outtextxy:指定位置输出字符串

该函数有重载版本,一个是输出字符串,一个是输出单个字符。

void outtextxy(
	int x,
	int y,
	LPCTSTR str
);
void outtextxy(
	int x,
	int y,
	TCHAR c
);
//参数
//x字符串输出时头字母的x轴的坐标值
//y字符串输出时头字母的y轴的坐标值
//str待输出的字符串的指针
//c待输出的字符

下面演示的例子是在VS2022中演示的,其他编译器的默认字符集可能不太相同。

  1. 使用MBCS字符集输出

首先介绍一下MBCS字符集:NBCS字符集是一种英文计算机字符集,全称为National Binary Coded Symbol。它由美国国防部于1963年开发,旨在为军用计算机提供一种标准的字符编码方式。NBCS字符集采用7位二进制编码,最多可以表示128个字符,其中包括控制字符、数字、英文字母和一些符号等。与ASCII(American Standard Code for Information Interchange)字符集非常相似,但并不完全相同。与ASCII字符集不同的是,NBCS字符集中包括特殊的控制字符和制表符等,这些字符无法被正常打印出来。此外,NBCS字符集还有一些其他的特殊字符,如美元符号和度符号等,这些字符在ASCII字符集中是没有的。尽管NBCS字符集已经逐渐被更为通用的ASCII字符集所替代,但在某些领域,如军事和航空航天等,在特定的应用场景下仍然会使用NBCS字符集。

//使用例子
#include <graphics.h>
#include <cstdio>
int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();
    char str[] = "Hello, I am limou!";
    outtextxy(100, 100, str);
    getchar();
    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}

这里有可能出现用不了outtextxy()的情况,解决办法是修改字符集。“右击项目->配置属性->高级->高级属性->字符集->使用多字节字符集”。

在这里插入图片描述
在这里插入图片描述

这是因为outtextxy()函数默认使用的是ANSI字符集(即多字节字符集MBCS的一种具体实现,可以先简单理解为ANSI和MBCS两者之间是包含关系),而Unicode字符集是一种用于支持国际化编程的编码标准,与ANSI字符集不兼容。因此,在使用outtextxy()函数输出Unicode字符时,需要将字符集修改为支持Unicode的多字节或宽字节字符集。

在这里插入图片描述

  1. 使用Unicode字符集输出

当然,如果您希望不更改字符集选项,也可以使用wchar_t这个类型,这种类型支持Unicode字符集输出,注意使用的时候还需要加上一个标识符L。

//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();

    wchar_t str[] = L"Hellb o, I am limou!";
    outtextxy(100, 100, str);
    getchar();

    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}
  1. 自适应字符集输出
//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();

    TCHAR str[] = _T("Hellb o, I am limou!");
    outtextxy(100, 100, str);
    getchar();

    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}

另外在默认情况下,输出字符串的背景会用当前背景色填充。字符串是以第一个字符的左上角作为坐标来定位字符串的。

2.settextcolor:设置当前文字颜色

这个函数比较简单,和前面设置绘画颜色是类似的使用方法。

void settextcolor(COLORREF color);
//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();

    settextcolor(RED);

    TCHAR str[] = _T("Hellbo, I am limou!");
    outtextxy(100, 100, str);
    getchar();

    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}

3.settextstyle:设置当前文字样式

该函数有较多的重载版本。

void settextstyle(
	int nHeight,//nHeight:指定高度(逻辑单位)
	int nWidth,//nWidth:字符的平均宽度(逻辑单位),若为0,则比例自适应
	LPCTSTR lpszFace//lpszFace:字体名称
);
void settextstyle(
	int nHeight,//nHeight:指定高度(逻辑单位)
	int nWidth,//nWidth:字符的平均宽度(逻辑单位),若为0,则比例自适应
	LPCTSTR lpszFace,//lpszFace:字体名称
	int nEscapement,//nEscapement:字符串的书写角度,单位0.1度 
	int nOrientation,//nOrientation:每个字符的书写角度,单位0.1度
	int nWeight,//nWeight:字符的笔画粗细,范围0~1000。0表示默认粗细。详见LOGFONT结构体
	bool bItalic,//bItalic:是否斜体
	bool bUnderline,//bUnderline:是否有下划线 
	bool bStrikeOut//bStrikeOut:是否有删除线
);
void settextstyle(
	int nHeight,//nHeight:指定高度(逻辑单位) 
  	int nWidth,//nWidth:字符的平均宽度(逻辑单位),若为0,则比例自适应
  	LPCTSTR lpszFace,//lpszFace:字体名称
  	int nEscapement,//nEscapement:字符串的书写角度,单位0.1度
  	int nOrientation,//nOrientation:每个字符的书写角度,单位0.1度
  	int nWeight,//nWeight:字符的笔画粗细,范围0~1000。0表示默认粗细。详见LOGFONT结构体
  	bool bItalic,//bItalic:是否斜体
  	bool bUnderline,//bUnderline:是否有下划线
  	bool bStrikeOut//bStrikeOut:是否有删除线
	BYTE fbCharSet,//fbCharSet:指定字符集。详见LOGFONT结构体
	BYTE fbOutPrecision,//fbOutPrecision:指定文字的输出精度。详见LOGFONT结构体
	BYTE fbClipPrecision,//fbClipPrecision:指定文字的剪辑精度。详见LOGFONT结构体 
	BYTE fbQuality,//fbQuality:指定文字的输出质量。详见LOGFONT结构体
	BYTE fbPitchAndFamily//fbPitchAndFamily:指定以常规方式描述字体的字体系列。详见LOGFONT结构体
);
void settextstyle(
  	const LOGFONT *font//font:指向LOGFONT结构体的指针
);

//返回值
//无

LOGFONT是一种文字样式结构体,我们可以提前设置好一个有关文字样式的结构体,再使用指针指向这个结构体,然后使用文字样式函数settextstyle()设置文字样式就行。

struct LOGFONT
{ 
  	LONG lfHeight;//指定高度 
  	LONG lfWidth;//指定字符的平均宽度,如果为0则比例自适应 
  	LONG lfEscapement;//字符串的书写角度,单位0.1度,默认为0 
  	LONG lfOrientation;//每个字符的书写角度,单位0.1度,默认为0 
  	LONG lfWeight;//字符的笔画粗细,范围为0~1000,默认为0,有值 
  	BYTE lfItalic;//指定是否为斜体 
  	BYTE lfUnderline;//指定是否有下划线 
  	BYTE lfStrikeOut;//指定是否为删除线 
  	BYTE lfCharSet;//指定字符集,有值 
  	BYTE lfOutPrecision;//指定文字输出精度,有值 
  	BYTE lfClipPrecision;//指定文字的剪辑精度,有值 
  	BYTE lfQuality;//指定文字的输出质量,有值 
  	BYTE lfPitchAndFamily;//指定以常规方式描述字体的字体系列,有值 
  	TCHAR lfFaceName[LF_FACESIZE];//字体名称 
};

这个结构体有很多参数值得说道一下,但是站在快速使用角度上来说,只要能使用一些常见的成员即可,这些内容以后来补充会更加合适。

4.gettextcolor:获取当前文字颜色

COLORREF gettextcolor();

5.gettextstyle:获取当前文字样式

void gettextstyle(LOGFONT *font);

6.textheight:获取字符串实际占用的像素高度

//该函数也有重载版本
int textheight(LPCTSTR str);
int textheight(TCHAR c);

//参数
//str:指定的字符串指针
//c:指定的字符

//返回值
//返回字符串实际占用的像素高度
//测试例子
#include <graphics.h>
#include <cstdio>

int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();

    settextcolor(RED);

    TCHAR str[] = _T("Hello, I am limou!\nThis a C++ code.");
    outtextxy(100, 100, str);
    getchar();

    int pxSize = textheight(str);
    printf("%d\n", pxSize);
    getchar();

    rectangle(200, 200, 500, 200 + pxSize);
    getchar();

    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}
//可以看到矩形的高度和字符串输出的字符高度

7.textwidth:获取字符串实际占用的像素宽度

int textheight(LPCTSTR str);
int textheight(TCHAR c);
//参数
//str:指定的字符串指针。
//c:指定的字符。

//返回值
//该字符串实际占用的像素高度。
//使用例子
#include <graphics.h>
#include <cstdio>

int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();

    settextcolor(RED);

    TCHAR str[] = _T("Hello, I am limou!\nThis a C++ code.");
    outtextxy(100, 100, str);
    getchar();

    int pxSize1 = textheight(str);
    printf("%d\n", pxSize1);
    getchar();

    int pxSize2 = textwidth(str);
    printf("%d\n", pxSize2);
    getchar();

    rectangle(200, 200, 200 + pxSize2, 200 + pxSize1);
    getchar();

    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}
//可以看到输出了和字符串一样大小的矩形

在这里插入图片描述

8.drawtext:在指定区域内以指定格式输出字符串

暂时还用不到,先忽略,以后补充。

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

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

相关文章

Altium Designer VS CADENCE 颜色配置

最近公司要求用CADENCE画图&#xff0c;对于我这个用了10年以上AD的老玩家来说&#xff0c;真的是很不想接受&#xff0c;虽然AD有版权问题&#xff0c;据说也容易收到律师函&#xff0c;但还是不想更换&#xff0c;毕竟用了10年了&#xff0c;感情、熟练程度摆在那里。没办法&…

继承的基本内容

在面向对象部分提到过&#xff0c;面向对象三大特性&#xff08;不是只有三个特性&#xff0c;而是指存在感最强的三个特性&#xff09;&#xff1a;封装&#xff0c;继承&#xff0c;多态。 封装&#xff1a;对比C语言&#xff0c;将数据和处理数据的方法放入一个类中&#xf…

【算法总结】——组合型回溯

文章目录 组合型回溯例题1——组合从输入考虑模板从答案考虑模板 例题2——括号生成解法一解法二 剪枝分析回溯时间复杂度的通用方法 组合型回溯 组合型和子集型之间的差异在哪里呢&#xff1f; 相比子集问题&#xff0c;组合问题是可以做一些额外的优化的&#xff08;因为只…

Linux模块文件编译到内核与独立编译成.ko文件的方法

很多粉丝在群里提问&#xff0c;如何把一个模块文件编译到内核中或者独立变异成ko文件。本文给大家详解讲解。 1. 内核目录 Linux内核源代码非常庞大&#xff0c;随着版本的发展不断增加。它使用目录树结构&#xff0c;并且使用Makefile组织配置、编译。 初次接触Linux内核&…

Visual Studio 2022写Windows程序造成CPU占用率过高故障排除

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天针对Visual Studio 2022写Windows程序造成CPU占用率过高故障进行排除。 下面是一个标准的Windows程序&#xff0c;也可以说是经典程序了&#xff0c;但是这个程序一运行&#xff0c;WinMain.exe的CPU占用…

Android 13(T) - binder阅读(2)- ServiceManager的启动与获取

1 ServiceManager的启动 1.1 服务的启动与注册 上一篇笔记中有说到&#xff0c;ServiceManager是一个特殊的binder service&#xff0c;所以它和普通的service一样需要打开binder驱动&#xff0c;在驱动中创建一个属于ServiceManager进程的binder_proc。 int main(int argc,…

django中发送get post请求并获得数据

django中发送get post请求并获得数据 项目结构如下注册路由 urls.py在处理函数中处理请求 views.py进行 get的请求01浏览器 get请求传参数02服务器django get参数解析获取01浏览器 post的发送浏览器get 请求 获取页面返回的 form 发送post请求 带参数 02服务器django的post请求…

【Unity3D】平面光罩特效

1 前言 屏幕深度和法线纹理简介中对深度和法线纹理的来源、使用及推导过程进行了讲解&#xff0c;激光雷达特效中讲述了一种重构屏幕像素点世界坐标的方法&#xff0c;本文将沿用激光雷达特效中重构像素点世界坐标的方法&#xff0c;实现平面光罩特效。 假设平面光罩的高度为 s…

SpringCloud Alibaba入门7之引入服务网关Gateway

我们需要在客户端和服务端之间加一个统一的入口&#xff0c;来作为请求的统一接入&#xff0c;而在微服务的体系中&#xff0c;承担这个角色的就是网关。我们只需要将网关的机器IP配置到DNS,或者接入负载&#xff0c;那么客户端的服务最终通过我们的网关&#xff0c;再转发到对…

GEE:欧几里得距离——计算目标图像中每个像素到目标像素的距离

作者:CSDN @ _养乐多_ 利用欧几里得距离计算目标图像中每个像素到目标像素的距离,以量化像素与目标的接近程度。 结果如下图所示, 文章目录 一、欧几里得距离简介二、代码一、欧几里得距离简介 欧几里得距离(Euclidean distance)是在数学中常用的一种距离度量方式,用于…

Android PMS APP安装流程

仓库网址&#xff1a;http://androidxref.com/9.0.0_r3/xref/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java 一、PMS安装APP流程图 二、文件复制 PMS处理安装HandlerParams安装参数流程图 PackageManagerService.java#installStage…

职场求生记|唐朝打工人如何绝地求生

&#x1f4da;书名&#xff1a;《长安的荔枝》 ✏️作者&#xff1a;马伯庸 作为“见微”系列神作&#xff0c;其在微信读书总榜的第一名位置持续一段时间了&#xff0c;其讲述的内容和每个人都息息相关&#xff0c;更是能引起职场人的无限共鸣&#xff0c;值得深思。 ⭐故事…

使用networkx查看某一个节点的一阶/二阶/三阶邻居

文章目录 前言手动高级 前言 一般情况下&#xff0c;貌似这些图之类的包&#xff0c;只提供查询一个节点的一阶邻居&#xff0c;但是有的时候我们需要二阶甚至三阶&#xff0c;那么该如何做呢&#xff1f; 注意一下&#xff0c;本文的方法仅可以针对二阶或者三阶&#xff0c;…

一分钟 帮你搞懂什么是柔性数组!

文章目录 什么是柔性数组&#xff1f;柔性数组的特点柔性数组的使用模拟实现柔性数组的功能柔性数组的优势 什么是柔性数组&#xff1f; 柔性数组这个概念相信大多数人博友都没有听说过&#xff0c;但是它确实存在。 在C99中&#xff0c;结构&#xff08;结构体&#xff09;的…

【雕爷学编程】Arduino动手做(121)---夏普粉尘传感器模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

EMC学习笔记(十一)过孔

过孔 1.过孔模型1.1 过孔的数学模型1.2 对过孔模块的影响因素 2.过孔对信号传导与辐射发射影响2.2 过孔对阻抗控制的影响2.2 过孔数量对信号质量的影响 1.过孔模型 从过去设计的一些PCB板效果来看&#xff0c;过孔对于低频&#xff0c;低速信号的影响是很小的&#xff0c;但是…

Android 窗口实现原理

一、基本概念 1、窗口显示架构图 多窗口的核心原理其实就是分栈和设置栈边界2、Android的窗口分类 Android应用程序窗口,这个是最常见的&#xff08;拥有自己的WindowToken)譬如&#xff1a;Activity与Dialog Android应用程序子窗口&#xff08;必须依附到其他非子窗口才能存…

深度学习-第T11周——优化器对比实验

深度学习-第T11周——优化器对比实验 深度学习-第T11周——优化器对比实验一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集…

6月份读书学习好文记录

看看CHATGPT在最近几个月的发展趋势 https://blog.csdn.net/csdnnews/article/details/130878125?spm1000.2115.3001.5927 这是属于 AI 开发者的好时代&#xff0c;有什么理由不多去做一些尝试呢。 北大教授陈钟谈 AI 未来&#xff1a;逼近 AGI、融进元宇宙&#xff0c;开源…

06-浏览器渲染原理

什么是渲染&#xff1f; render&#xff0c;HTML字符串 --渲染--> 像素信息 URL地址是一个字符串&#xff0c;HTML、css、js都在里面 可以把渲染想象成一个函数&#xff0c;上代码&#xff1a; function render (html) {/* 第一行第二行*/return pixels; } 渲染时间点 …