本文发布于1761天前,最后更新于 1725 天前,其中的信息可能已经有所发展或是发生改变。
控制台程序有一个命令,可以修改输出字体的颜色,那么C++编写控制台程序的时候,也可以实现这样的功能嘛?答案是肯定的。
我们来看一下效果图:
代码
#include <iostream>
#include <cstdlib>
#include <Windows.h>
using namespace std;
void Color(int a) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);
}//设置输出颜色
void ResetColor() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
}
int main()
{
cout << "原:\t\t都是黑底白字,也太乏味了吧" << endl;
Color(11);
cout << "一行一颜色:\t来点有料的吧" << endl;
Color(14);
cout << "一行多颜色:\t好的";
Color(13);
cout << "哥" << endl;
Color(BACKGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "带背景颜色:\t" << "TEST" << endl;
ResetColor();
system("pause");
return 0;
}
这里需要解释一个函数 SetConsoleTextAttribute()
原型
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
第一个参数使用GetStdHandle(STD_OUTPUT_HANDLE)函数就可获得控制台的输出句柄
第二个参数是用来设置颜色选项的,他是靠一个字节的低四位来控制前景色,高四位来控制背景色的。
什么意思呢?就是这个形参实际上可以同时设置字体颜色和背景颜色
它可以通过如下的表格来设置颜色(实际上可以用一个整数值代替)
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 |
※摘自百度百科,词条传送门: 点我
如果要同时设置背景颜色和字体颜色,可以像下面这样用按位或运算符
BACKGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED
当然如果嫌麻烦可以直接用整数值代替,因为它们实际上就是整数
整数值字体颜色表示如下:
1 深蓝色
2 深绿色
3 深青色
4 深红色
5 深粉色
6 黄色
7 深白色
8 灰色
9 浅蓝色
10 浅绿色
11 浅青色
12 浅红色
13 浅粉色
14 浅黄色
15 浅白色
看这些数字不难发现 ,这实际上就是控制台命令color的颜色列表
这样子的话,也许有的人会说直接用system("color");
不就可以实现更改颜色字体了嘛,这个我也想到过,不过经过我的试验,发现用这句话实现的更改字体颜色会默认更改掉整个控制台的颜色,这显然不是我们想要的结果
可以