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

您好这里是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 
#include 
int main()
{
    // 初始化图形窗口
    initgraph(640, 480, EX_SHOWCONSOLE);
    getchar();
    char str[] = "Hello, I am limou!";
    outtextxy(100, 100, str);
    getchar();
    // 等待用户按键并关闭图形窗口
    closegraph();
    getchar();
    return 0;
}

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

easyX库文字输出相关函数(注释版)_第1张图片
easyX库文字输出相关函数(注释版)_第2张图片

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

easyX库文字输出相关函数(注释版)_第3张图片

  1. 使用Unicode字符集输出

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

//使用例子
#include 
#include 

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 
#include 

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 
#include 

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 
#include 

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 
#include 

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;
}
//可以看到输出了和字符串一样大小的矩形

easyX库文字输出相关函数(注释版)_第4张图片

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

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

你可能感兴趣的:(c语言,c++,easyX)