1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C/C++ 控制台输出彩色文本(改变局部字体的颜色)

C/C++ 控制台输出彩色文本(改变局部字体的颜色)

时间:2021-07-30 23:24:55

相关推荐

C/C++ 控制台输出彩色文本(改变局部字体的颜色)

我写了一个输出彩色文本的函数:

void COLOR_PRINT(const char* s, int color){HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | color);printf(s);SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | 7);}

开头需要添加引用:

#include <windows.h>#include <stdio.h>

颜色代号:

0 = 黑色 8 = 灰色

1 = 蓝色 9 = 淡蓝色

2 = 绿色 10 = 淡绿色

3 = 浅绿色 11 = 淡浅绿色

4 = 红色 12 = 淡红色

5 = 紫色 13 = 淡紫色

6 = 黄色 14 = 淡黄色

7 = 白色 15 = 亮白色

如果颜色代号大于15,字体颜色就会呈周期性循环,而底色会按颜色代号的顺序进行更换。

比如说,0字体是黑色,底色也是黑色(0),16字体是黑色,底色是蓝色(1),32也是黑色,对应底色是绿色(2),依次类推。这是

因为SetConsoleTextAttribute函数是通过一个字节的低4位(16种颜色,2的4次方)控制前景色(字体颜色),高四位控制背景颜色,而本该是四位前景色如果大于15多出来的位数就会溢出到高四位,进而改变了背景色。

那么我们就可以稍微改动一下,让背景色代号乘16(放到高位)后再和前景色代号逻辑或,就可以用两个0-15的颜色代号分别控制前景色和背景色了,改动后的函数如下:

void COLOR_PRINT2(const char* s, int front_color,int back_color){HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_INTENSITY | back_color*16 |FOREGROUND_INTENSITY | front_color);printf(s);SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | 7);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。