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

今天就先到这了!!!

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CICD注册和使用gitlab-runner常见问题

1、现象 fatal: unable to access https://github.com/homebrew/brew/: 2、解决 git config --global --unset http.proxy git config --global --unset https.proxy 查看gitlab-runner是否成功: userusers-MacBook-Pro ~ % gitlab-runner -h 查看gitlab-run…

C语言实现跳表(附源码)

最近在刷一些链表的题目,在leetcode上有一道设计跳表的题目,也是通过查阅各种资料,自己实现出来,感觉这是种很神奇的数据结构。 一.简介 跳表与红黑树,AVL树等,都是一种有序集合,那既然是有序…

大数据信用报告在线查询平台哪个好?

随着大数据技术在金融风控的运用,大数据信用越来越被人熟知,由于线下没有查询大数据信用的地方,想要查询大数据信用报告只有在线上查询,那大数据信用报告在线查询平台哪个好呢?本文贷你一起去了解市面上比较好的三个平台。 大数据…

分布式任务调度框架XXL-JOB详解

分布式任务调度 概述 场景: 如12306网站根据不同车次设置放票时间点,商品成功发货后向客户发送短信提醒等任务,某财务系统需要在每天上午10天前统计前一天的账单数据 任务的调度是指系统为了完成特定业务,基于给定的时间点,时间间隔&#…

情人节适合送哪些礼物?2024年情人节送礼指南大推荐!

情人节即将来临,这是一年一度表达爱意的时刻。在这个特殊的日子里,送上一份精心挑选的礼物,将会让爱意更加深刻。但是,肯定会有朋友会困惑于选择哪种礼物能够最好地表达您的心意。不用担心,今天小编就为大家精心准备了…

图书管理系统设计

工程链接放在这里 https://download.csdn.net/download/Samature/88805507使用 注意事项 登录 登录有初始账号:yzb 密码:123123123 后续可以自己加 保存的用户信息位置和题目 library是图书馆内容 users是用户名 可能遇到的bug 暂无,有的…

【Python】【完整代码】解析Excel 文件中的内容并检查是否包含某字符串,并返回判断结果

示例: 开发需求:解析Excel 文件中的内容并检查是否包含 "Fail" 字符,若没有则返回True,若有则返回False 实现代码: #!/usr/bin/env python3 # -*- encoding: utf-8 -*-File : check_excel_for_fail.py Ti…

filebeat采集中断与变慢问题分析

4、未采集的那段时间内无以下日志,这段时间内数据源正常,应能被正常采集到。 5、相关进程资源,服务器磁盘、cpu、内存无明显异常。 6、日志中断前有如下报错。 2022-02-15T15:22:22.2230800 INFO log/harvester.go:254 Harvester started fo…

this指针详细总结 | static关键字 | 静态成员

文章目录 1.this指针引入2.this指针的特性3.静态成员3.1.C语言中static的基本用法3.2.C中的static关键字 1.this指针引入 class student { public:student(const string& name){ _name name; }void print(){// _name<>this->_name<>(*this)._name// 说一下…

YOLOv5算法进阶改进(15)— 引入密集连接卷积网络DenseNet

前言:Hello大家好,我是小哥谈。DenseNet(密集连接卷积网络)是一种深度学习神经网络架构,它在2017年由Gao Huang等人提出。DenseNet的核心思想是通过密集连接(dense connection)来促进信息的流动和共享。在传统的卷积神经网络中,每个层的输入只来自于前一层的输出。而在…

Python爬虫从基础到入门:数据接口实战--获取豆瓣阅读热度最高的书籍信息

接着上一篇文章&#xff1a;Python爬虫从基础到入门&#xff1a;找数据接口&#xff0c;接下来实战一下&#xff0c;以获取豆瓣阅读这个网站热度最高的书籍信息为例&#xff0c;网址为&#xff1a;豆瓣阅读 Python爬虫从基础到入门&#xff1a;数据接口实战--获取豆瓣阅读热度…

Java自救手册

目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&#xff1a; 网络不通一般有两种情况&#xff1a; Maven 拿Maven 拿到Maven以后 Maven单独的报红 Git git注意&#xff1a; 目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&…