【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)

目录

游戏推荐

研究初步

SetConsoleTextAttribute函数  

原型

参数

举个栗子

最后

题外话


一篇游戏笔记。。。

游戏推荐

最近,在玩(完)一个c++的控制台游戏

啊,真的非常好玩。虽然是一个文字游戏,但有很多隐藏的情节,很多隐藏的结局,在一次次结局的解锁中,你就会不知不觉地上瘾。事不宜迟,先展示一下吧。

基本页面:

一进来就可以看见这个,这是建议先看看提示 。

 这是游戏刚开始时的页面,放在这里,用于展示游戏的绚丽,并且铺个垫……

这是其中的一个结局的展示,给你们期待期待。

 好了,在文末评论区发送666,将给出下载链接(绝对免费)

研究初步

不过,我们今天要讨论的,不是娱乐,而是一个很小却又很有趣的c++小知识。

在游戏里,我发现,它的字体能够变换,于是,我看起了代码

在代码中,我看见了一个这样的语句

system("color f4");

我赶紧查了一下,发现:system是一个C/C++的函数。windows操作系统下system() 函数详解主要是在C语言中的应用,system函数需加头文件<stdlib.h>后方可调用。在Windows中,可以发出一个DOS命令

而且 systemtem("color AB"); 其中color后面的A是背景色代号,B是前景色代号。颜色属性由两个十六进制数字指定,AB都可以为以下任何值:

0 = 黑色 8 = 灰色(“亮黑色”)

1 = 蓝色 9 = 亮蓝色

2 = 绿色 A = 亮绿色

3 = 湖蓝色 B = 亮湖蓝色

4 = 红色 C = 亮红色

5 = 紫色 D = 亮紫色

6 = 黄色 E = 亮黄色

7 = 白色 F = 亮白色

我赶紧打开了我的test文件,写出了这样的代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    system("color f3");
    printf("1\n");
	system("color A5");
	printf("2\n");
}

显示出来,是这样的:

(好绿呀!!) 很显然,它把前景、后景,都按最后一条颜色处理语句处理了。

看来是我看的不仔细,我又一次打开了代码。。。

这次,看到了这些代码:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);

(后略)

……什么东西呀!!!

我,带着不懂就问的精神,打开CSDN,查了一下。

运行下面示例程序会发现,system函数加上color函数这个指令后可以对控制台文本属性进行改变,但是一改变就是整个控制台发生变化,只能把控制台改成一种颜色,无法达到我们想要指定一行的文本发生颜色改变(即改成多种颜色)的效果。因此,有下面SetConsoleTextAttribute函数,这个函数更加灵活。

啊!正中下怀!

为了庆祝这一点,我直接将下载的网址放出来!

网址就是,就是:c++生存小游戏(巨好玩)-C++文档类资源-CSDN文库


SetConsoleTextAttribute函数  

原型

BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);

参数

consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);

GetStdHandle(nStdHandle)是返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。

其参数nStdHandle的值为下面几种类型的一种:

含义

STD_INPUT_HANDLE

标准输入的句柄

STD_OUTPUT_HANDLE

标准输出的句柄

STD_ERROR_HANDLE

标准错误的句柄

wAttributes是用来设置颜色的参数:

wAttributes

颜色

对应的值

FOREGROUND_BLUE

字体颜色:蓝

1

FOREGROUND_GREEN

字体颜色:绿

2

FOREGROUND_RED

字体颜色:红

4

FOREGROUND_INTENSITY

前景色高亮显示

8

BACKGROUND_BLUE

背景颜色:蓝

16

BACKGROUND_GREEN

背景颜色:绿

32

BACKGROUND_RED

背景颜色:红

64

BACKGROUND_INTENSITY

背景色高亮显示

128

也就是说SetConsoleTextAttribute函数是靠一个字节的低四位来控制前景色,高四位来控制背景色。

举个栗子

#include<Windows.h>
#include<bits/stdc++.h>
using namespace std;
int main() {
	cout << "Hello    ——this is the prime color" << endl;
	cout << "先来看一哈青色的字儿:";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置青色
	cout << endl << "Hello World!" << endl;
 
	string q;
	cout << "来尝试随便输入一下吧(给你一个蓝底白字):";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); //设置蓝底白字
	cin >> q;
 
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);//没有给其他颜色,只给了文本增强,只有亮度稍微改变一下
	cout <<endl<< "再随便输入一下吧" << endl;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置白色
	cin >> q;
 
	return 0;
}

慢慢玩吧,这东西真的非常有趣。而且,用在游戏中也非常炫酷


最后

啊哈,聪明的人应该在我主页找到链接了,认真的人也在文章中找到链接,其他人呢,看准了:

在文末评论区发送666,将给出下载链接(绝对免费)


题外话

对了,还有一件事,就是:

想知道你的文章在CSDN中质量如何吗?

        你想知道你的CSDN文章到底写得怎么样吗?

        你想要获得一个你的系统的CSDN文章评分吗?

        CSDN质量分数帮你解决这个问题,网址如下:

        https://www.csdn.net/qc

        界面在如下,如果你打开的和我一样,说明你的操作完全没问题:

        然后再将你想要测试的文章的网址粘贴到搜索框中,按下搜索:

  (此处以本人的文章DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释)为例

        快去看看你的文章质量如何吧!

  • 13
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 41
    评论
当我们在C语言控制台输出文本时,除了可以输出文本内容之外,还可以对文本的颜色进行设置,来使输出的文本更加丰富、直观。控制台颜色设置是通过Windows API函数`SetConsoleTextAttribute()`来实现的。 `SetConsoleTextAttribute()`函数可以设置输出文本的前景背景,前景指的是文本本身的颜色,而背景则是文本所在的背景颜色。该函数的原型如下: ```c BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes ); ``` 其中,`hConsoleOutput`参数指定了要设置属性的控制台屏幕缓冲区的句柄,可以通过`GetStdHandle(STD_OUTPUT_HANDLE)`函数获取。`wAttributes`参数指定了输出文本的属性,其中低4位指定前景,高4位指定背景。下面是常用的颜色属性值: | 颜色属性值 | 前景 | 背景 | | --------- | ------ | ------ | | 0 | 黑 | 黑 | | 1 | 蓝 | 蓝 | | 2 | 绿 | 绿 | | 3 | 浅绿 | 浅绿 | | 4 | 红 | 红 | | 5 | 紫 | 紫 | | 6 | 黄 | 黄 | | 7 | 白 | 白 | | 8 | 灰 | 灰 | | 9 | 淡蓝 | 淡蓝 | | 10 | 淡绿 | 淡绿 | | 11 | 淡浅绿 | 淡浅绿 | | 12 | 淡红 | 淡红 | | 13 | 淡紫 | 淡紫 | | 14 | 淡黄 | 淡黄 | | 15 | 亮白 | 亮白 | 例如,我们可以使用以下代码将控制台的前景设置为红背景设置为黄: ```c #include <stdio.h> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); WORD color = FOREGROUND_RED | BACKGROUND_YELLOW | FOREGROUND_INTENSITY; SetConsoleTextAttribute(handle, color); printf("Hello World!"); return 0; } ``` 除了设置前景背景之外,我们还可以使用`GetConsoleScreenBufferInfo()`函数获取当前控制台屏幕缓冲区的属性信息,包括前景背景等,以便恢复默认的控制台颜色。例如: ```c #include <stdio.h> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo(handle, &info); WORD old_color = info.wAttributes; WORD color = FOREGROUND_RED | BACKGROUND_YELLOW | FOREGROUND_INTENSITY; SetConsoleTextAttribute(handle, color); printf("Hello World!"); SetConsoleTextAttribute(handle, old_color); return 0; } ``` 在控制台中,我们也可以通过以下代码来设置控制台字体颜色,以便更改输出文本的颜色: ```c #include <stdio.h> #include <windows.h> int main() { system("color 4f"); printf("Hello World!"); return 0; } ``` 其中,`system("color 4f")`指令中的`4`表示红,`f`表示白,可以根据需要更改。需要注意的是,该指令只能在Windows系统上执行,且只能在控制台中执行,不能在IDE等其他环境中执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L.Y.H._

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值