C++ 设置字体颜色
·
C++ 设置字体颜色
很多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~15
,BackC
表示背景色,取值也是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;
}
结束语
通过了本章的学习,想比你已经学会了设置字体颜色的方法,有问题可以在评论区留言。
更多推荐
已为社区贡献1条内容
所有评论(0)