目录
  • 方法一:system(“color”)
  • 方法二:SetConsoleTextAttribute
  • 方法三:ANSI转义序列
  • 结束语

方法一: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/C++实现控制台输出不同颜色字体的方法
  • C语言如何改变字体颜色