C/C++/EasyX——入门图形编程(3)

news2024/11/24 9:08:21

【说明】上一篇讲了基础图形的绘制,那么这一篇就来讲一下如何在窗口上绘制文字吧,友友们一起学习吧。(>y<)(^v^)

一:文字绘制函数

文字绘制函数用于在窗口上绘制文字

outtextxy(int x,int y,LPCTSTR str)在指定位置输出字符串
settextcolor(…)设置当前文字颜色
settextstyle(int nHeight,int nWidth,LPCTSTR lpszFace)设置字体样式,nHeight—指定整体字符串高度(可以理解为字体大小),nWidth—字符的平均宽度(如果为0,比例自适应),lpszFace—字体名称(只要你的系统中有,都可以写)
textheight(LPCTSTR str)获取字符串实际占用的像素高度
textwidth(LPCTSTR str)获取字符串实际占用的像素宽度

textheight(LPCTSTR str),textwidth(LPCTSTR str)可以用于文本的垂直和水平居中显示。

二:正文

(先说明一下,如果输出文字想用 scanf,那么友友们可以自己动手试一试,显而易见,是不行的。它只能在控制台显示,却在绘图窗口上无法显示的。)

1.基础代码

#include <stdio.h>
#include <graphics.h>
int main()
{
	//创建一个窗口,窗口长300,宽100
	initgraph(300, 100);

	//设置背景颜色
	setbkcolor(WHITE);//first step
	cleardevice();//second step

	//绘制文字
	settextcolor(RED);//注意这个函数的位置,是要在输出字符之前的

	//1.输出单个字符是没有问题的,但当输出多个字符时,会报错,是字符集导致的,不了解的可以去搜索一下哦
	outtextxy(100, 20, 'w');

	/*2.输出多个字符时,有以下几种方式
	1)在字符串前面加上大写的L,outtextxy(50, 50, L"Hello World")
	2)在TEXT()把字符串包起来,outtextxy(50, 50, TEXT("Hello World"))
	3)!!不需要添加任何代码,打开上方项目->属性->高级->字符集->使用多字节字符集,就可以了,!!推荐使用这个,这样就不用每个改一遍了,也可以规避一些错误*/
	outtextxy(50, 50, "Hello World");


	getchar();//不写这个会闪退

	//关闭窗口
	closegraph(); 
//这个写不写无所谓,问题不大
		return 0;
}

接下来会在以上代码的基础上进行一些改变,下面的代码会很简洁,详细的代码注释在第一个代码中,也方便友友们看的更加简洁。(^v^)

2.改变输出字体

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(700, 200);

	//设置背景颜色
	setbkcolor(WHITE);
	cleardevice();

	setlinecolor(BLUE);
	circle(50, 50, 50);

	//绘制文字
	settextcolor(RED);
	settextstyle(50, 0, "楷体");
    outtextxy(50, 50, "世界灿烂盛大,欢迎回家");


	getchar();//不写这个会闪退
	closegraph(); 
		return 0;
}

我们可以看到字体遮住了我们所画的图形,可知字体的背景是白色的,有没有什么办法去掉呢?

3.去掉字体背景颜色

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(700, 200);
	setbkcolor(WHITE);
	cleardevice();
    setlinecolor(BLUE);
	circle(50, 50, 50);
	settextcolor(RED);
	settextstyle(50, 0, "楷体");

	//设置背景模式,transparent,设置为透明
	setbkmode(TRANSPARENT);
    outtextxy(50, 50, "世界灿烂盛大,欢迎回家");

	getchar();
	closegraph(); 
	return 0;
}

这样就可以了。

4.改变字体颜色,这里用了RGB

除了上面代码中直接输入我们所熟知的“RED"等颜色,我们还可以自己手动输入三个数据,这里还有一个比较快捷的方式,当你在页面中看到想要的颜色,可以Ctrl+Alt+A,将箭头指向你想要的颜色,按下C,然后 Ctrl+V 复制,就可以了。

settextcolor(RGB(214, 157, 118));//注意每个值不要超过255
outtextxy(50, 50, "世界灿烂盛大,欢迎回家");

5.文本的垂直和水平居中显示

这个还是有点意思的。如下图,怎么能让文字居中显示在矩形中呢?

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(700, 200);
	setbkcolor(WHITE);
	cleardevice();
	settextcolor(RED);
	settextstyle(20, 0, "楷体");
	setbkmode(TRANSPARENT);
    //outtextxy(100, 150, "世界灿烂盛大,欢迎回家");

//画个矩阵,四个参数分别表示矩阵左上角的坐标,右下角的坐标(x,y)
	setfillcolor(YELLOW);
	setlinecolor(BLUE);
	fillrectangle(200, 50, 500, 100);

//文字居中
	char ch[] = "世界灿烂盛大,欢迎回家";

    //求出字符串的宽度,高度用textwidth,textheight函数
	int width = 300 / 2 - textwidth(ch) / 2;
	int height = 50 / 2 - textheight(ch) / 2;
	outtextxy(200 + width, 50 + height, ch);

	getchar();
	closegraph(); 
	return 0;
}

至于原理,其实仔细想想就能明白。下面的图更加直观

三:总结

好了,关于文字的绘制就讲到这里了,下一章会讲到图像输出的相关问题,每章讲的知识不多,一步一步来吧 (。・ω・。)  如果对友友有用的话,就给我点个赞吧(^~^)ヽ(*≧ω≦)ノ,下次见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jQuery——对象的过滤

在 jQuery 对象中的元素对象数组中过滤出一部分元素来 ① first&#xff08;&#xff09; ② last&#xff08;&#xff09; ③ eq&#xff08;index / -index&#xff09; ④ filter&#xff08;selector&#xff09;&#xff1a;对当前元素提要求 ⑤ not&#xff08;sel…

电脑IP地址怎么换成二进制:详解转换过程与应用

在电脑网络的世界里&#xff0c;IP地址是每台设备独一无二的身份标识。而我们日常所见的IP地址&#xff0c;大多是以点分十进制的形式呈现。然而&#xff0c;在电脑内部&#xff0c;IP地址实际上是以二进制的形式进行存储和处理的。那么&#xff0c;电脑IP地址怎么换成二进制呢…

pygame入门(千字详细版)

千字赘述&#xff0c;万字总结&#xff0c;就为博客点一赞吧&#xff01; 1.安装pygame pip install pygame 安装完成后在python中输入检验有没有问题&#xff0c;回车键应该不会报错。 >>>import pygame >>>2.pygame模块预览 3.项目实战 3.1.0 hello w…

一键开启高清录屏:盘点Windows最火四款录屏工具

嘿&#xff0c;朋友们&#xff0c;今天咱们来聊聊那些让我在电脑前忙活得热火朝天的录屏神器究竟怎么样。作为一个经常需要录制教程、分享游戏精彩瞬间的普通用户&#xff0c;我可是对这几款软件有着满满的体验心得&#xff0c;现在就给你们一一道来。 一、福昕录屏大师 网址…

编码与解码

文章目录 编码与解码一、字节 & 字符二、编码 & 解码三、字符集 & 字符编码四、ASCII五、ISO-8859-1六、GB七、Unicode1、概述2、发展3、UTF-8 编码4、UTF-16 编码 八、Base64 编码1、概述2、原理3、代码示例 九、十六进制编码 编码与解码 一、字节 & 字符 字…

kali下编译AOSP报错(libncurses.so.5: cannot open shared object file)

编译报错信息&#xff1a;libncurses.so.5: cannot open shared object file: No such file or directory /bin/bash -c "PWD/proc/self/cwd prebuilts/clang/host/linux-x86/clang-3289846/bin/clang -Ifr ameworks/rs/script_api/include -Iexternal/clang/lib/Headers …

【AI知识点】小世界网络(Small-World Networks)

小世界网络&#xff08;Small-World Networks&#xff09; 是一种具有独特拓扑结构的网络模型&#xff0c;广泛应用于研究社交网络、神经网络、互联网以及其他复杂系统中的节点间连接方式。小世界网络的特点是节点之间的平均路径长度较短&#xff0c;并且大多数节点的局部连接较…

世邦通信股份有限公司IP网络对讲广播系统RCE

漏洞描述 SPON世邦IP网络广播系统采用的IPAudio™技术, 将音频信号以数据包形式在局域网和广域网上进行传送&#xff0c;是一套纯数字传输的双向音频扩声系统。传统广播系统存在的音质不佳&#xff0c;传输距离有限&#xff0c;缺乏互动等问题。该系统设备使用简便&#xff0c…

知识图谱入门——7:阶段案例:使用 Protégé、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop 搭建知识图谱

在 Windows 环境中结合使用 Protg、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop&#xff0c;可以高效地实现从自然语言处理&#xff08;NLP&#xff09;到知识图谱构建的全过程。本案例将详细论述环境配置、步骤实现以及一些扩展和不足之处。 文章目录 1. 环境准备1.1 Neo4j…

webGL入门(六)图形旋转

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</…

PIDM—— 物理正则化扩散模型

概述 论文地址&#xff1a;https://arxiv.org/pdf/2403.14404 源码地址&#xff1a;https://github.com/jhbastek/physicsinformeddiffusionmodels 扩散模型在逼近非常复杂的数据分布方面具有极高的性能和多功能性&#xff0c;近年来在自然科学领域的应用迅速扩展。鉴于其在科…

两数相除111

1.//给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 //整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。 // 例如&#xff0c;8.345 将被截断为 8 &#xff0…

基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

WDG看门狗在stm32中的应用

一&#xff0c;WDG看门狗的介绍 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系统的可靠性和安全性看…

2款.NET开源且免费的Git可视化管理工具

Git是什么&#xff1f; Git是一种分布式版本控制系统&#xff0c;它可以记录文件的修改历史和版本变化&#xff0c;并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的&#xff0c;它具有高效、灵活、稳定等优点&#xff0c;如今已成为软件开发领域中最流行…

深入理解Dubbo源码核心原理-Part1

启动类&#xff1a; 进入EnableDubbo查看&#xff1a; ①EnableDubboConfig&#xff1a; ②DubboComponentScan&#xff1a; 请看核心方法registerServiceBeans() 到这里&#xff0c;Dubbo对于Bean的加载初始化就做完了&#xff0c;Spring容器读取这些BeanDefinition就要对其进…

【计算机体系结构】TLB和Cache

TLB的设计 在两级页表的虚拟存储系统中&#xff0c;需要访问两次物理内存才能得到虚拟地址所对应的物理地址&#xff0c;而物理内存的访问速度是远远慢于处理器的&#xff0c;为了对该过程进行加速&#xff0c;可以加入一个页表的缓存&#xff0c;该缓存将页表中最近使用的PTE…

<<迷雾>> 第7章 会变魔术的触发器(1)--连着两个按键开关的逻辑电路 示例电路

info::操作说明 鼠标单击开关切换开合状态 A 能使灯点亮并保持; B 则点亮的灯熄灭. 注: 此处使用的是 按钮开关, 松开鼠标后开关会自己断开, 类似于手机和电脑上的电源按钮 因系统原因, 此类开关与普通开关在外观上并无差别. primary::在线交互操作链接 https://cc.xiaogd.net/…

房屋水电费记账本:内置的数组数据击按钮不能删除,页面手动添加的可以删除

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>房租水电费记录</title><script type&qu…