很多时候,我们希望编写出能够拥有各种颜色的程序,能够让人眼前一亮,虽然system(color)函数可以设置颜色,但是system(color)函数设置的颜色只能有一种,这显然不是我们想要的结果,我们需要的是一个名为SetConsoleTextAttribute的函数。 SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开),不同于system(color),SetConsoleTextAttribute()可以改变界面多种颜色,而system()只能修改为一种!。
<windows.h>
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
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代表前景,
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x06);
printf("花狗\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x07);
printf("花狗\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x08);
printf("花狗\n");
结果如下:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
printf("花狗\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
printf("花狗\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
printf("花狗\n");
结果如下:
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 | 下划线 |
好了,其他数值各位有兴趣的自行研究。
如有错误,欢迎指出批评,欢迎讨论。 每文一句:没有理想,就达不到目的;没有勇敢,就得不到东西。