写在前面:
大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书。
很感谢能有这样一个平台让我能够在这里分享所学所感。
我喜欢编程,喜欢代码,喜欢去做一个程序员。
努力学习,争取多年后,给亲人更好的生活。
QQ/WX:2506897252 欢迎交流。

1.介绍

很多时候,我们希望编写出能够拥有各种颜色的程序,能够让人眼前一亮,虽然system(color)函数可以设置颜色,但是system(color)函数设置的颜色只能有一种,这显然不是我们想要的结果,我们需要的是一个名为SetConsoleTextAttribute的函数。
SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开),不同于system(color),SetConsoleTextAttribute()可以改变界面多种颜色,而system()只能修改为一种!。

2.头文件

<windows.h>

3.函数原型

BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);

4. 参数

HANDLE hConsoleOutput
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE)
GetStdHandle(nStdHandle)是返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。

其参数nStdHandle的值为下面几种类型的一种:

含义
STD_INPUT_HANDLE标准输入的句柄
STD_OUTPUT_HANDLE标准输出的句柄
STD_ERROR_HANDLE标准错误的句柄

这里我们只需要使用STD_OUTPUT_HANDLE即可,

WORD wAttributes是用来设置颜色的参数,有三种写法:

 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x07);
 //第二个参数填十六进制数字。
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
 //直接填十进制数字。
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLACK | FOREGROUND_RED);
 //BACKGROUND代表背景,FOREGROUND代表前景,

4.三种写法演示

(1)使用十六进制设置参数

 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x06);
 printf("花狗\n");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x07);
 printf("花狗\n");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
 printf("花狗\n");

结果如下:
在这里插入图片描述

其他颜色数值:

在这里插入图片描述

(2)使用十进制设置参数

 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
 printf("花狗\n");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
 printf("花狗\n");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
 printf("花狗\n");

结果如下:
在这里插入图片描述

其他颜色数据:

在这里插入图片描述

(3)使用函数已定义好的参数

 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | FOREGROUND_RED);
 printf("花狗\n");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | FOREGROUND_BLUE);
 printf("花狗\n");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN); 
 printf("花狗\n");

结果如下:
在这里插入图片描述

其他颜色数值:

属性含义
FOREGROUND_BLUE文字颜色包含蓝色
FOREGROUND_GREEN文字颜色包含绿色
FOREGROUND_RED文字颜色包含红色
FOREGROUND_INTENSITY文字颜色加强
BACKGROUND_BLUE背景颜色包含蓝色
BACKGROUND_GREEN背景颜色包含绿色
BACKGROUND_RED背景颜色包含红色
BACKGROUND_INTENSITY背景颜色加剧
COMMON_LVB_LEADING_BYTE前导字节
COMMON_LVB_TRAILING_BYTE尾随字节
COMMON_LVB_GRID_HORIZONTAL顶部水平
COMMON_LVB_GRID_LVERTICAL左垂直
COMMON_LVB_GRID_RVERTICAL正确的垂直
COMMON_LVB_REVERSE_VIDEO反转前景和背景属性
COMMON_LVB_UNDERSCORE下划线

好了,其他数值各位有兴趣的自行研究。

如有错误,欢迎指出批评,欢迎讨论。
每文一句:没有理想,就达不到目的;没有勇敢,就得不到东西。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐