EasyX图形库学习(二、文字输出)

2024-02-05 18:36

本文主要是介绍EasyX图形库学习(二、文字输出),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 一、文字绘制函数

字体属性结构体:logfont

文字输出

outtextxy   在指定位置输出字符串。

​编辑

但如果直接使用,可能有以下报错:

三种解决方案:

将一个int类型的分数,输出到图形界面上

如果直接使用:

会把score输入进去根据ASCII转成了字符,如下:

正确做法:

二、文字居中

三、VS中如何使用正常使用scanf(慎用)


 一、文字绘制函数

字体属性结构体:logfont

struct LOGFONT {LONG lfHeight;//指定高度(逻辑单位)LONG lfWidth //指定字符的平均宽度(逻辑单位)。如果为0,则比例自适应LONG lfEscapement;//字符串的书写角度,单位0.1度,默认为0LONG 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

今天就先到这了!!!

看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注!

你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。

这篇关于EasyX图形库学习(二、文字输出)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681796

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]