C++之如何设置字体颜色

 更新时间:2023年08月04日 09:47:07   作者:匿名用户__  
很多C++的初学者发现,控制台的颜色永远是黑白的,这未免太单调了,怎么才能使字体像那些软件一样呈彩色呢?现在,我们就将学习C++ 设置字体颜色的方法

方法一:system(“color”)

system函数想必大家都听说过,它可以用来设置字体的颜色,只需要在color后加上字体的背景色前景色

取值如下:

符号表示颜色符号表示颜色
0黑色8灰色
1蓝色9淡蓝色
2绿色A淡绿色
3浅绿色B淡浅绿色
4红色C淡红色
5紫色D淡紫色
6黄色E淡黄色
7白色F亮白色

接下来,我们就可以通过system("color")设置字体颜色了,

下面的代码就可以将字体设为白底黑字:

#include <bits/stdc++.h>
using namespace std;
int main() {
	system("color F0");
	cout<<"hello"<<endl;
	return 0;
}

方法二:SetConsoleTextAttribute

在使用system("color")的时候,你会发现,一旦使用该函数,整个窗口都会被改变颜色。

那么如何设置单个字的颜色呢?

这就要用到SetConsoleTextAttribute函数了,他需要头文件<windows.h>

void SetColorAndBackground(int ForgC, int BackC) {
	WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}

SetConsoleTextAttribute实际上需要混合颜色的,但为了方便使用 ,我们将他转换成以上函数,ForgC表示前景色,取值范围从1~15BackC表示背景色,取值也是1~15

我们就来做一个简单的测试:

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
void SetColorAndBackground(int ForgC, int BackC) {
	WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
int main() {
	SetColorAndBackground(15,0);
	cout<<"hello"<<endl;
	SetColorAndBackground(7,4);
	cout<<"hello"<<endl;
	return 0;
}

运行结果

方法三:ANSI转义序列

学习了SetConsoleTextAttribute函数,你会发现,SetConsoleTextAttribute中只有16种颜色,里面既没有橘色也没有棕色。

现在我们就来学习RGB颜色——ANSI,需要添加头文件<windows>

ANSI只适用于Windows10的用户,其他版本不支持 详见此处

void rgb_init() {																// 初始化
	HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);		//输入句柄
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);		//输出句柄
	DWORD dwInMode, dwOutMode;
	GetConsoleMode(hIn, &dwInMode);						//获取控制台输入模式
	GetConsoleMode(hOut, &dwOutMode);					//获取控制台输出模式
	dwInMode |= 0x0200;									//更改
	dwOutMode |= 0x0004;
	SetConsoleMode(hIn, dwInMode);						//设置控制台输入模式
	SetConsoleMode(hOut, dwOutMode);					//设置控制台输出模式
}
void rgb_set(int wr,int wg,int wb,int br,int bg,int bb) {						//设置RGB
	printf("\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm",wr,wg,wb,br,bg,bb);	//\033[38表示前景,\033[48表示背景,三个%d表示混合的数
}

我们先来看一下代码,rgb_init用来初始化ANSI(不然会乱码),接下来用rgb_init设置字体RGB颜色即可。

现在就上完整代码啦!

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
void rgb_init() {																// 初始化
	HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);		//输入句柄
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);		//输出句柄
	DWORD dwInMode, dwOutMode;
	GetConsoleMode(hIn, &dwInMode);						//获取控制台输入模式
	GetConsoleMode(hOut, &dwOutMode);					//获取控制台输出模式
	dwInMode |= 0x0200;									//更改
	dwOutMode |= 0x0004;
	SetConsoleMode(hIn, dwInMode);						//设置控制台输入模式
	SetConsoleMode(hOut, dwOutMode);					//设置控制台输出模式
}
void rgb_set(int wr,int wg,int wb,int br,int bg,int bb) {						//设置RGB
	printf("\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm",wr,wg,wb,br,bg,bb);	//\033[38表示前景,\033[48表示背景,三个%d表示混合的数
}
int main() {
	rgb_init();
	rgb_set(255,255,255,123,146,70);
	cout<<"hello"<<endl;
	rgb_set(255,255,255,63,126,130);
	cout<<"hello"<<endl;
	rgb_set(255,255,255,1,186,200);
	cout<<"hello"<<endl;
}

运行结果

结束语

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解C语言中telldir()函数和seekdir()函数的用法

    详解C语言中telldir()函数和seekdir()函数的用法

    这篇文章主要介绍了详解C语言中telldir()函数和seekdir()函数的用法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C/C++中抽象类详解及其作用介绍

    C/C++中抽象类详解及其作用介绍

    这篇文章主要介绍了C/C++中抽象类详解及其作用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • VC多线程编程详解

    VC多线程编程详解

    这篇文章主要介绍了VC多线程编程,实例形式详细分析了多线程编程的原理与实现方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C++实现单链表的构造

    C++实现单链表的构造

    这篇文章主要为大家详细介绍了C++实现单链表的构造,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C/C++程序开发中实现信息隐藏的三种类型

    C/C++程序开发中实现信息隐藏的三种类型

    这篇文章主要介绍了C/C++程序开发中实现信息隐藏的三种类型的相关资料,需要的朋友可以参考下
    2016-02-02
  • C++vector的insert函数用法小结

    C++vector的insert函数用法小结

    std::vector::insert是C++中用于在指定位置插入元素的函数,支持插入单个元素、多个相同元素、一个范围的元素或初始化列表中的元素,插入操作可能会使插入点之后的迭代器失效,并且时间复杂度为O(n),本文介绍C++vector的insert函数用法小结,感兴趣的朋友一起看看吧
    2025-03-03
  • C++类型转换的深入总结

    C++类型转换的深入总结

    这篇文章主要给大家介绍了关于C++类型转换的深入总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C语言中的二叉树和堆详解

    C语言中的二叉树和堆详解

    这篇文章主要介绍了C语言中的二叉树和堆详解,树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的,需要的朋友可以参考下
    2023-07-07
  • c++中的指针最全总结

    c++中的指针最全总结

    指针是整个C++的精髓所在,只有精通了指针才可以说是掌握了C++,可以说学习C++的过程是个熟练掌握和使用指针的过程,下面这篇文章主要给大家介绍了关于c++中指针的相关资料,需要的朋友可以参考下
    2024-04-04
  • 深入了解C++函数重载解析策略

    深入了解C++函数重载解析策略

    这篇文章主要为大家详细介绍了C++中函数重载的解析策略,文中的示例代码讲解详细,对我们学习C++有一定帮助,感兴趣的小伙伴可以了解一下
    2022-10-10

最新评论