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

news/2024/11/30 18:28:30/

您好这里是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.ppmy.cn/news/535419.html

相关文章

ipad刷机

看到网络上豆瓣中有个“豆瓣笔记”的功能觉得蛮好的&#xff0c;但是呢这个只有iphone版本的安装&#xff0c;没有android的安装&#xff0c;自己想到ipad上面也是可以安装iphone的程序的&#xff0c;就跑去装啦&#xff0c;不过呀&#xff0c;”相机功能不知道怎么在哪儿&…

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

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

基于jsp、servlet的超市购物车商城系统

文章目录 项目介绍主要功能截图:登录注册商品列表加入购物车查看购物车结算生成订单生成订单查看历史账单部分代码展示购物车servlet用户控制层订单设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,…

硬件入门之什么是mos管

硬件入门之什么是mos管 文章目录 硬件入门之什么是mos管一、mos管是什么&#xff1f;MOS管常用于&#xff1a; 驱动大功率电路中。MOS选型参数mos管调参数 二、实际应用场景1.防反接保护电路&#xff09;2.防过压保护电路3.防反接防过压电路一体电路4.驱动电路 总结 一、mos管是…

(万字长文)React 18 源码与原理解读 —— 看这一篇就够了

写在专栏开头&#xff08;叠甲&#xff09; 作者并不是前端技术专家&#xff0c;也只是一名喜欢学习新东西的前端技术小白&#xff0c;想要学习源码只是为了应付急转直下的前端行情和找工作的需要&#xff0c;这篇专栏是作者学习的过程中自己的思考和体会&#xff0c;也有很多参…

关联式容器set和map

文章目录 一.容器二.set的介绍1.insert2.lower_bound&&upper_bound3.find和countfindcount 三. multiset四.map最特别的operator[] 四.multimap&#xff0c;因为允许键值冗余&#xff0c;所以它没有operator[]&#xff0c;它的find返回的是中序遍历第一次遇到的节点五.…

[重走长征路]线程

创建多线程方式一&#xff1a;集成Thread类 1.创建一个继承自Thread的子类 2.重写Thread中的run方法 线程要做的事情声明在run中 3.创建Thread子类的对象 4.通过此对象调用start方法 start有两个作用 1、启动线程2、调用线程中的run方法 class MyThread extends Thread{Overri…

智能化连接厨房——海尔馨厨冰箱初体验印象

在过去很长一段时间里&#xff0c;传统家电产品除了在功耗与效率方面有所提升外&#xff0c;在产品本质方面并未发生革命性的改变——在既往的产品形态上遵循过去的规律&#xff0c;是这些传统家电产品默许的心态&#xff0c;因此在它们数十年的发展历程中&#xff0c;它们无一…