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

目录

 一、文字绘制函数

字体属性结构体:logfont

文字输出

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

​编辑

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

三种解决方案:

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

如果直接使用:

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

正确做法:

二、文字居中

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


 一、文字绘制函数

字体属性结构体: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

今天就先到这了!!!

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 系列目录: 标题博客第一篇:框架设计概览【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记第二篇:响应系统【Vue.js设计与实现】第二篇:响应系统-阅读笔记第三篇&#x…

洗地机哪个品牌质量好?盘点当下最值得买的4款洗地机型号推荐

随着生活节奏的加快,人们对于家庭清洁的需求也越来越迫切。而洗地机作为家庭清洁利器备受青睐,但洗地机也分为很多款式,每一个款式都具备不同的清洁效果,可以节省不少时间。接下来,就由笔者为大家详细介绍一下洗地机哪…

如何去除图片水印?三个简单实用方法

随着数字时代的来临,我们每天都会接触到大量的图片,然而,许多图片却因为水印而影响了美观。为了解决这个问题,我们需要图片去水印的方法。今天,我们就来为大家介绍几个简单实用的方法,可以轻松去除水印&…

备战蓝桥杯---搜索(优化1)

显然&#xff0c;我们可以用BFS解决&#xff0c;具体实现与八数码类似&#xff1a; 下面是代码&#xff1a; #include<bits/stdc.h> using namespace std; #define N 3000000 string a,b; int hh,dis[N],cnt; struct node{string u,v; }bian[7]; map<string,int>…

Flutter 和 Android原生(Activity、Fragment)相互跳转、传参

前言 本文主要讲解 Flutter 和 Android原生之间&#xff0c;页面相互跳转、传参&#xff0c; 但其中用到了两端相互通信的知识&#xff0c;非常建议先看完这篇 讲解通信的文章&#xff1a; Flutter 与 Android原生 相互通信&#xff1a;BasicMessageChannel、MethodChannel、…

MongoDB复制集实战及原理分析

文章目录 MongoDB复制集复制集架构三节点复制集模式PSS模式&#xff08;官方推荐模式&#xff09;PSA模式 典型三节点复制集环境搭建复制集注意事项环境准备配置复制集复制集状态查询使用mtools创建复制集安全认证复制集连接方式 复制集成员角色属性一&#xff1a;Priority 0属…

match-case与if/elif/else(python)

if/elif/else语句应对一般场景&#xff0c;match-case主打复杂条件分支语句。 (笔记模板由python脚本于2024年01月28日 18:27:37创建&#xff0c;本篇笔记适合有一定编程基础&#xff0c;对python基础已比较扎实的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

uniapp使用u-popup组件弹窗出现页面还可滑动

*1、问题所在&#xff1a; 弹窗遮罩层出现了页面依旧可以上下滑动 2、要求: 为了用户更好交互体验&#xff0c;弹窗出现后应禁止页面往下滑动 3、实现思路&#xff1a; 在弹窗盒子外层添加个阻止触摸冒泡事件&#xff0c;使用touchmove.stop.prevent 4、代码如下&#xff…

eosio.token 智能合约介绍

一、目的 eosio.token系统合约定义了允许用户为基于EOSIO的区块链创建、发行和管理代币的结构和操作&#xff0c;它演示了一种实现允许创建和管理代币的智能合约的方法。本文详细介绍了eosio.token系统合约并在本地测试链上实际发行了代币进行演示&#xff0c;适用于EOS智能合…

OJ刷题:《剑指offer》之单身狗1、2 !(巧用位操作符,超详细讲解!)

目录 1.单身狗1 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 2.单身狗2 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 不是每个人都能做自己想做的事&#xff0c;成为自己想成为的人。 克心守己&#xff0c;律己则安&#xff01; 创作不易&#xff0c;宝子们&#xff01;如…

homework day3

第三章 类与构造函数 一&#xff0e;选择题 1、下列不能作为类的成员的是&#xff08;B&#xff09; A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 2、假定AA为一个类&#xff0c;a()为该类公有的函数成员&#xff0c;x为该类的一个对象&am…

如何在一台MacBook上构建大模型知识库?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《构建大模型知识库案例实战》 —1— 如何在一台 MacBook 上构建企业知识库&#xff1f; 最核心最重要的是我们手上的文档资料出于安全要求&#xff0c;不能随便上传到云服务&#xff0c;也就无法实际验证知识…

单链表的经典题目练习

哈喽&#xff0c;小伙伴们&#xff0c;上一次我们学习了单链表的知识&#xff0c;这次我们就要运用学到的知识来做一些相关的题目。我们都知道&#xff0c;要学好数据结构与算法&#xff0c;一定要多刷相关的题目才能有所提高。所以我们一起来学习一些单链表的经典题目算法题。…

操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构

目录 操作系统 windows macos Linux 服务器搭建网站 关于解释器的流程 curl -I命令 名词解释 dos bash/terminal&#xff0c;(终端) nginx/apache&#xff08;Linux平台下的&#xff09; iis&#xff08;Windows平台下的&#xff09; GUI(图形化管理接口&#xff…

Multisim14.0仿真(四十九)共阴极/阳极7段数码管驱动设计

一、74LS47/48简介: 74LS47/48芯片是一种常用的七段数码管译码器驱动器,常用在各种数字电路和单片机系统的显示系统中. 二、74LS47/48引脚说明及定义: 7段显示译码器74LS47/48是输出低/高电平有效的译码器,74LS47/48除了有实现7段显示译码器基本功能的输入(DCBA)和输出(Ya…

小程序<swiper/>组件详解及使用指南

目录 引言微信小程序的重要性Swiper组件的角色与功能简介Swiper组件基础Swiper组件的定义与使用场景如何在微信小程序中引入Swiper组件Swiper组件的基本结构与属性Swiper组件的高级应用自定义Swiper指示点样式实现Swiper的动态效果(如自动播放、循环播放)说明引言 微信小程序…

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现…

【C++】类和对象之运算符重载(三)

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

[SWPUCTF 2021 新生赛]ez_unserialize

根据下面的user_agent和Disallow可以判断这个是在robots.txt 我们看的出来这是一个反序列化需要我们adminadmin passwdctf construct 构造方法&#xff0c;当一个对象被创建时调用此方法&#xff0c;不过unserialize()时却不会被调用 destruct 析构方法&#xff0c;PHP将在对象…

【学网攻】 第(20)节 -- 网络端口地址转换NAPT配置

系列文章目录 目录 系列文章目录 文章目录 前言 一、NAPT是什么&#xff1f; 二、实验 1.引入 实验目的 技术原理 实验步骤 实验设备 实验拓扑图 实验配置 实验验证 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第…