EasyX图形库学习(二、文字输出)
int nHeight,//指定高度(逻辑单位)int nWidth,//字符的平均宽度LPCTSTR lpszFace//字体名称。
目录
一、文字绘制函数
字体属性结构体:logfont
struct LOGFONT {
LONG lfHeight;//指定高度(逻辑单位)
LONG lfWidth //指定字符的平均宽度(逻辑单位)。如果为0,则比例自适应
LONG lfEscapement;//字符串的书写角度,单位0.1度,默认为0
LONG lfOrientation;//每个字符的书写角度,单位 0.1 度,默认为 0。
LONG lfWeight;//字符的笔画粗细,范围 0~1000,0 表示默认粗细,使用数字或下表中定义的宏均可。PS:宏太多就不写了
BYTE lfItalic;//指定字体是否是斜体。
BYTE lfUnderline;//指定字体是否有下划线
BYTE lfStrikeOut;//指定字体是否有删除线
BYTE lfCharSet;//指定字符集
BYTE lfOutPrecision;//指定文字的输出精度
BYTE lfClipPrecision;//指定文字的剪辑精度。
BYTE lfQuality;//指定文字的输出质量。
BYTE lfPitchAndFamily;//指定以常规方式描述字体的字体系列。字体系列描述大致的字体外观。字体系列用于在所需精确字体不可用时指定字体。
TCHAR lfFaceName[LF_FACESIZE];//字体名称,名称不得超过 31 个字符。如果是空字符串,系统将使用第一个满足其它属性的字体。
};
文字输出
-
在指定位置输出文字,两个同名的函数,会自动根据参数调用。
void outtextxy(int x,int y,LPCTSTR str); void outtextxy(int x,int y,char c);
-
设置文字颜色
void settextcolor(COLORREF color);
-
设置背景模式
-
TRANSPARENT 背景透明
void setbkmode(int mode);
-
-
设置文字样式(大小、字体)
-
height 文字的高度,width字符的宽度(如果为0则表示自适应),face字体
void settextstyle(int height,int width,LPCTSTR face);
-
-
获取文字占用的像素高度和宽度
int textheight(LPCTSTR str); int textwidth(LPCTSTR str);
-
文字居中显示在某一个区域
int rectx,recty,rectw,recth; //矩形区域左上角坐标和大小 int x = rectx + (rectw - textwidth(str))/2; int y = recty + (recth - textheight(str))/2; //x y 即最终文字所在的位置
outtextxy 在指定位置输出字符串。
void outtextxy(
int x, //字符串输出头字母的 x 轴的坐标值
int y, //头字母的 y 轴的坐标值
TCHAR c //待输出的字符
);
字符串常见的编码有两种:MBCS 和 Unicode。VC6 新建的项目默认为 MBCS 编码,VC2008 及高版本的 VC 默认为 Unicode 编码。LPCTSTR 可以同时适应两种编码。为了适应两种编码,请使用 TCHAR 字符串及相关函数。
默认情况下,输出字符串的背景会用当前背景色填充。使用函数 setbkmode 可以设置文字的背景部分保持透明或使用背景色填充。
settextstyle(48, 0, "微软雅黑");
//设置文字颜色
settextcolor(BROWN);
//绘制文字
outtextxy(10, 20, "Hello World");
但如果直接使用,可能有以下报错:
C2665:"outtextxy":2个重载没有一个可以转换所有参数类型
原因:EasyX与字符串相关的函数,都有字符集问题 UNICODE 多字节字符集
三种解决方案:
1.在字符串的前面使用L进行转换 强制转换
2.用带参宏(_T(),_TEXT())把字符串包裹起来 自适应转换 推荐使用
3.菜单栏->项目->属性->高级->字符集->把UNICODE改成多字节字符集 大力推荐
将一个int类型的分数,输出到图形界面上
如果直接使用:
void draeTest()
{
settextstyle(48, 0, "微软雅黑");
//设置文字颜色
settextcolor(BROWN);
settextstyle(30, 0, "微软雅黑");
//现在有一个int类型的分数,需要输出到图形界面上
int score = 66;
//直接使用
outtextxy(getwidth() - 100, 0, score);//把score输入进去转成了字符
}
会把score输入进去根据ASCII转成了字符,如下:
正确做法:
使用sprintf_s(str,"Score:%d", score);把score格式化成字符串
void drawTest()
{
settextstyle(48, 0, "微软雅黑");
//设置文字颜色
settextcolor(BROWN);
settextstyle(30, 0, "微软雅黑");
//现在有一个int类型的分数,需要输出到图形界面上
int score = 66;
//直接使用
//outtextxy(getwidth() - 100, 0, score);//把score输入进去转成了字符
//要格式化成字符串
char str[50] = "";
//格式字符串
sprintf_s(str,"Score:%d", score);
outtextxy(getwidth() - 100, 0, str);
}
void drawTest()
{
printf("hello,EasyX!");
//设置文字大小
settextstyle(48, 0, "微软雅黑");
//设置文字颜色
settextcolor(BROWN);
//绘制文字
outtextxy(10, 20, "Hello World");
//error C2665:"outtextxy":2个重载没有一个可以转换所有参数类型
//EasyX与字符串相关的函数,都有字符集问题 UNICODE 多字节字符集
/* 三种解决方法
* 1.在字符串的前面使用L进行转换 强制转换
* 2.用带参宏(_T(),_TEXT())把字符串包裹起来 自适应转换 推荐使用
* 3.菜单栏->项目->属性->高级->字符集->把UNICODE改成多字节字符集 大力推荐
*/
settextstyle(30, 0, "微软雅黑");
//现在有一个int类型的分数,需要输出到图形界面上
int score = 66;
//直接使用
//outtextxy(getwidth() - 100, 0, score);//把score输入进去转成了字符
//要格式化成字符串
char str[50] = "";
//格式字符串
sprintf_s(str,"Score:%d", score);
outtextxy(getwidth() - 100, 0, score);
}
二、文字居中
int rx = 130; // 矩形左上角x坐标
int ry = 380; // 矩形左上角y坐标
int rw = 300; // 矩形宽度
int rh = 60; // 矩形高度
int hSpace = (rw - textwidth(str1)) / 2; // 计算水平居中的间距
int vSpace = (rh - textheight(str1)) / 2; // 计算垂直居中的间距
textwidth
该字符串实际占用的像素宽度。
textheight
该字符串实际占用的像素高度。
void centerText()
//文字居中
{
//来一个矩形
int rx = 130;
int ry = 380;
int rw = 300;
int rh = 60;
setfillcolor(RGB(230, 231, 232));
fillrectangle(rx,ry,rx+rw,ry+rh);
//绘制文字
settextcolor(RED);
char str1[] = "Centet Text";
int hSpace = (rw - textwidth(str1)) / 2;
int vSpace = (rh - textheight(str1)) / 2;
outtextxy(rx+hSpace, ry+vSpace, str1);
}
三、VS中如何使用正常使用scanf(慎用)
打开项目->属性->C/C++常规->SDL检查->否->应用
或者在加入#define _CRT_SECURE_NO_WARNINGS 1
今天就先到这了!!!
看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)