Easyx进阶(一)

14 篇文章 0 订阅
6 篇文章 5 订阅

Easyx进阶(一)

——文字处理

1. 输出文字(outtextxy)

void outtextxy(
	int x,
	int y,
	LPCTSTR str
);

void outtextxy(
	int x,
	int y,
	TCHAR c
);
  • x:字符串输出时头字母的 x 轴的坐标值。
  • y:字符串输出时头字母的 y 轴的坐标值。
  • str:待输出的字符串的指针。
  • c:待输出的字符。
  • 返回值:无

备注

该函数不会改变当前位置。

字符串常见的编码有两种:MBCS 和 Unicode。VC6 新建的项目默认为 MBCS 编码,VC2008 及高版本的 VC (比如vs2022)默认为 Unicode 编码。LPCTSTR 可以同时适应两种编码。为了适应两种编码,请使用 TCHAR 字符串及相关函数。

默认情况下,输出字符串的背景会用当前背景色填充。使用函数 setbkmode 可以设置文字的背景部分保持透明或使用背景色填充。

#include <easyx.h>
#include <conio.h>

int main(void) {
	// 1. 初始化图形设备
	initgraph(400, 400);

	// 2. to do,,,...
	outtextxy(100, 100, L"你好,世界!");

	_getch();

	// 3. 关闭图形化设备,并释放资源
	closegraph();

	return 0;
}

在这里插入图片描述

2. 设置文字的颜色(settextcolor)

void settextcolor(COLORREF color);
  • color:字体颜色
  • 返回值:无
#include <easyx.h>
#include <conio.h>

int main(void) {
	// 1. 初始化图形设备
	initgraph(400, 400);

	// 2. to do,,,...
	settextcolor(YELLOW);	// 设置字体颜色为黄色
	outtextxy(100, 100, L"你好,世界!");

	_getch();

	// 3. 关闭图形化设备,并释放资源
	closegraph();

	return 0;
}

在这里插入图片描述

3. 设置文字的样式(settextstyle)

void settextstyle(
	int nHeight,
	int nWidth,
	LPCTSTR lpszFace
);

void settextstyle(
	int nHeight,
	int nWidth,
	LPCTSTR lpszFace,
	int nEscapement,
	int nOrientation,
	int nWeight,
	bool bItalic,
	bool bUnderline,
	bool bStrikeOut
);

void settextstyle(
	int nHeight,
	int nWidth,
	LPCTSTR lpszFace,
	int nEscapement,
	int nOrientation,
	int nWeight,
	bool bItalic,
	bool bUnderline,
	bool bStrikeOut,
	BYTE fbCharSet,
	BYTE fbOutPrecision,
	BYTE fbClipPrecision,
	BYTE fbQuality,
	BYTE fbPitchAndFamily
);

void settextstyle(const LOGFONT *font);
  • nHeight:指定高度(逻辑单位)。

  • nWidth:字符的平均宽度(逻辑单位)。如果为 0,则比例自适应。

  • lpszFace:字体名称。

  • nEscapement:字符串的书写角度,单位 0.1 度。

  • nOrientation:每个字符的书写角度,单位 0.1 度。

  • nWeight:字符的笔画粗细,范围 0~1000。0 表示默认粗细。详见 LOGFONT 结构体。

  • bItalic:是否斜体。

  • bUnderline:是否有下划线。

  • bStrikeOut:是否有删除线。

  • fbCharSet:指定字符集。详见 LOGFONT 结构体。

  • fbOutPrecision:指定文字的输出精度。详见 LOGFONT 结构体。

  • fbClipPrecision:指定文字的剪辑精度。详见 LOGFONT 结构体。

  • fbQuality:指定文字的输出质量。详见 LOGFONT 结构体。

  • fbPitchAndFamily:指定以常规方式描述字体的字体系列。详见 LOGFONT 结构体。

  • font:指向 LOGFONT 结构体的指针。

  • 返回值:无

#include <easyx.h>
#include <conio.h>

int main(void) {
	// 1. 初始化图形设备
	initgraph(400, 400);

	// 2. to do,,,...
	// 设置当前字体为高 16 像素的“Consolas”。(VC6 / VC2008 / VC2010 / VC2012)
	settextstyle(16, 0, _T("Consolas"));
	outtextxy(100, 100, L"你好,世界!");

	// 设置输出效果为抗锯齿 (VC6 / VC2008 / VC2010 / VC2012)
	LOGFONT f;
	gettextstyle(&f);						// 获取当前字体设置
	f.lfHeight = 24;						// 设置字体高度为 48
	_tcscpy_s(f.lfFaceName, _T("黑体"));		// 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
	f.lfQuality = ANTIALIASED_QUALITY;		// 设置输出效果为抗锯齿  
	settextstyle(&f);						// 设置字体样式
	outtextxy(0, 50, _T("你好,世界!抗锯齿效果"));
	_getch();

	// 3. 关闭图形化设备,并释放资源
	closegraph();

	return 0;
}

在这里插入图片描述

4. 按格式输出文字(drawtext)

int drawtext(
	LPCTSTR str,
	RECT* pRect,
	UINT uFormat
);

int drawtext(
	TCHAR c,
	RECT* pRect,
	UINT uFormat
);
  • str:待输出的字符串。

  • pRect:指定的矩形区域的指针。某些 uFormat 标志会使用这个矩形区域做返回值。详见后文说明。

  • uFormat:指定格式化输出文字的方法。详见后文说明。

  • c:待输出的字符。

  • 返回值:函数执行成功时,返回文字的高度。

    如果指定了 DT_VCENTER 或 DT_BOTTOM 标志,返回值表示从 pRect->top 到输出文字的底部的偏移量。

    如果函数执行失败,返回 0。

备注

默认情况下,输出字符串的背景会用当前背景色填充。使用函数 setbkmode 可以设置文字的背景部分保持透明或使用背景色填充。

以下是 uFormat 参数可以使用的设置项,用来设置文字输出时的格式:

标志描述
DT_BOTTOM调整文字位置到矩形底部,仅当和 DT_SINGLELINE 一起使用时有效。
DT_CALCRECT检测矩形的宽高。如果有多行文字,drawtext 使用 pRect 指定的宽度,并且扩展矩形的底部以容纳每一行文字。如果只有一行文字,drawtext 修改 pRect 的右边以容纳最后一个文字。无论哪种情况,drawtext 都返回格式化后的文字高度,并且不输出文字。
DT_CENTER文字水平居中。
DT_EDITCONTROL以单行编辑的方式复制可见文本。具体的说,就是以字符的平均宽度为计算依据,同时用这个方式应用于编辑控制,并且这种方式不显示可见部分的最后一行。
DT_END_ELLIPSIS对于文本显示,如果字符串的末字符不在矩形内,它会被截断并以省略号标识。 如果是一个单词而不是一个字符,其末尾超出了矩形范围,它不会被截断。 字符串不会被修改,除非指定了 DT_MODIFYSTRING 标志。
DT_EXPANDTABS展开 TAB 符号。 默认每个 TAB 占8个字符位置。注意,DT_WORD_ELLIPSIS、DT_PATH_ELLIPSIS 和 DT_END_ELLIPSIS 不能和 DT_EXPANDTABS 一起用。
DT_EXTERNALLEADING在行高里包含字体的行间距。通常情况下,行间距不被包含在正文的行高里。
DT_HIDEPREFIXWindows 2000/XP: 忽略文字中的前缀字符(&),并且前缀字符后面的字符不会出现下划线。其他前缀字符仍会被处理。例如:输入字符串: "A&bc&&d" 通常输出: "Abc&d" DTDT_HIDEPREFIX:"Abc&d"Copy
DT_INTERNAL使用系统字体计算文字的宽高等属性。
DT_LEFT文字左对齐。
DT_MODIFYSTRING修改指定字符串为显示出的正文。仅当和 DT_END_ELLIPSIS 或 DT_PATH_ELLIPSIS 标志同时使用时有效。
DT_NOCLIP使输出文字不受 pRect 裁剪限制。使用 DT_NOCLIP 会使 drawtext 执行稍快一些。
DT_NOFULLWIDTHCHARBREAKWindows 2000/XP: 防止换行符插入到 DBCS (double-wide character string,即宽字符串),换行规则相当于 SBCS 字符串。仅当和 DT_WORDBREAK 一起使用时有效。例如,汉字就是宽字符,设置该标志后,连续的汉字会像英文单词一样不被换行符中断。
DT_NOPREFIX关闭前缀字符的处理。通常,DrawText 解释前缀转义符 & 为其后的字符加下划线,解释 && 为显示单个 &。指定 DT_NOPREFIX,这种处理被关闭。例如:输入字符串: "A&bc&&d" 通常输出: "Abc&d" DT_NOPREFIX: "A&bc&&d"
DT_PATH_ELLIPSIS对于显示的文字,用省略号替换字符串中间的字符以便容纳于矩形内。如果字符串包含反斜杠(),DT_PATH_ELLIPSIS 尽可能的保留最后一个反斜杠后面的文字。 字符串不会被修改,除非指定了DT_MODIFYSTRING标志。
DT_PREFIXONLY**Windows 2000/XP:**仅仅在(&)前缀字符的位置下绘制一个下划线。不绘制字符串中的任何其他字符。例如:输入字符串: "A&bc&&d" 通常输出: "Abc&d" DT_PREFIXONLY: " _ "
DT_RIGHT文字右对齐。
DT_RTLREADING设置从右向左的阅读顺序(当文字是希伯来文或阿拉伯文时)。默认的阅读顺序是从左向右。
DT_SINGLELINE使文字显示在一行。回车和换行符都无效。
DT_TABSTOP设置 TAB 制表位。uFormat 的 15–8 位指定 TAB 的字符宽度。默认 TAB 表示 8 个字符宽度。注意,DT_CALCRECT、DT_EXTERNALLEADING、DT_INTERNAL、DT_NOCLIP 和 DT_NOPREFIX 不能和 DT_TABSTOP 一起用。
DT_TOP文字顶部对齐。
DT_VCENTER文字垂直居中。仅当和 DT_SINGLELINE 一起使用时有效。
DT_WORDBREAK自动换行。当文字超过右边界时会自动换行(不拆开单词)。回车符同样可以换行。
DT_WORD_ELLIPSIS截去无法容纳的文字,并在末尾增加省略号。
#include <easyx.h>
#include <conio.h>

int main(void) {
	// 1. 初始化图形设备
	initgraph(400, 400);

	// 在屏幕中央输出字符串
	RECT r = { 0, 0, 400, 400 };
	drawtext(_T("Hello World"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	_getch();

	// 3. 关闭图形化设备,并释放资源
	closegraph();
}

在这里插入图片描述

5. 更多详情

传送门

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值