您好这里是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中演示的,其他编译器的默认字符集可能不太相同。
- 使用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的多字节或宽字节字符集。
- 使用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;
}
- 自适应字符集输出
//使用例子
#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:在指定区域内以指定格式输出字符串
暂时还用不到,先忽略,以后补充。