文章摘要
控制台程序有一个命令,可以修改输出字体的颜色,那么C++编写控制台程序的时候,也可以实现这样的功能嘛?答案是肯定的。 我们来看一下效果图: 代码 #include iostream> #include cstdlib> #include Windows.h> using namespace std; void Color(int a) { SetConsoleTextAttribute(GetSt…
控制台程序有一个命令,可以修改输出字体的颜色,那么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"); 不就可以实现更改颜色字体了嘛,这个我也想到过,不过经过我的试验,发现用这句话实现的更改字体颜色会默认更改掉整个控制台的颜色,这显然不是我们想要的结果控制台程序有一个命令,可以修改输出字体的颜色,那么C++编写控制台程序的时候,也可以实现这样的功能嘛?答案是肯定的。
我们来看一下效果图:

代码
这里需要解释一个函数 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
当然如果嫌麻烦可以直接用整数值代替,因为它们实际上就是整数
整数值字体颜色表示如下:
看这些数字不难发现 ,这实际上就是控制台命令color的颜色列表

这样子的话,也许有的人会说直接用system("color");不就可以实现更改颜色字体了嘛,这个我也想到过,不过经过我的试验,发现用这句话实现的更改字体颜色会默认更改掉整个控制台的颜色,这显然不是我们想要的结果
本文采用 CC BY-NC-SA 4.0 协议进行授权,如无注明均为原创,转载请注明出处。
标题:为你的控制台加点料作者:九仞之行链接:http://dev.styunlen.cn/archives/post-216.html
