我记得,原则上,Win32控制台不支持任何ANSI颜色.方法之一是用Console API实现.
1. Console API
BOOL WINAPI SetConsoleTextAttribute( _In_ HANDLE hConsoleOutput, // 控制台输出流句柄 _In_ WORD wAttributes // 设置属性 );
hConsoleOutput [输入参数]
控制台屏幕的输出流的句柄(handle to console screen buffer)。
这个文件流的句柄必须有写入(GENERIC_READ)的权限。更多的信息,请查看MSDN上的Console Buffer Security and Access Rights。
wAttributes [输入参数]
具体常见设置属性如下:
Value | Meaning |
---|---|
FOREGROUND_BLUE 0x0001
|
Text color contains blue. |
FOREGROUND_GREEN 0x0002
|
Text color contains green. |
FOREGROUND_RED 0x0004
|
Text color contains red. |
FOREGROUND_INTENSITY 0x0008
|
Text color is intensified. |
BACKGROUND_BLUE 0x0010
|
Background color contains blue. |
BACKGROUND_GREEN 0x0020
|
Background color contains green. |
BACKGROUND_RED 0x0040
|
Background color contains red. |
BACKGROUND_INTENSITY 0x0080
|
Background color is intensified. |
COMMON_LVB_LEADING_BYTE 0x0100
|
Leading byte. |
COMMON_LVB_TRAILING_BYTE 0x0200
|
Trailing byte. |
COMMON_LVB_GRID_HORIZONTAL 0x0400
|
Top horizontal. |
COMMON_LVB_GRID_LVERTICAL 0x0800
|
Left vertical. |
COMMON_LVB_GRID_RVERTICAL 0x1000
|
Right vertical. |
COMMON_LVB_REVERSE_VIDEO 0x4000
|
Reverse foreground and background attribute. |
COMMON_LVB_UNDERSCORE 0x8000
|
Underscore. |
属性 | 意义 |
---|---|
FOREGROUND_BLUE | 前景色包含 蓝色 |
FOREGROUND_GREEN | 前景色包含 绿色 |
FOREGROUND_RED | 前景色包含 红色 |
FOREGROUND_INTENSITY | 前景色加强 |
BACKGROUND_BLUE | 背景色包含 蓝色 |
BACKGROUND_GREEN | 背景色包含 绿色 |
BACKGROUND_RED | 背景色包含 红色 |
BACKGROUND_INTENSITY | 背景色加强 |
COMMON_LVB_GRID_HORIZONTAL | 顶部水平网格 |
COMMON_LVB_GRID_LVERTICAL | 左竖直网格 |
COMMON_LVB_GRID_RVERTICAL | 右竖直网格 |
COMMON_LVB_UNDERSCORE |
下划线 |
1 //来自https://www.cnblogs.com/lovelp/p/setconsoletextattribute.html 2 #include <windows.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 int main() 7 { 8 HANDLE hOut; 9 10 // 获取输出流的句柄 11 hOut = GetStdHandle(STD_OUTPUT_HANDLE); 12 13 printf("普通颜色看看\n"); 14 15 SetConsoleTextAttribute(hOut, 16 FOREGROUND_GREEN | // 前景色_绿色 17 FOREGROUND_INTENSITY ); // 前景色_加强 18 printf("设置了浅绿色.\n"); 19 printf("并且完了之后就一直是浅绿色\n"); 20 21 SetConsoleTextAttribute(hOut, 22 FOREGROUND_BLUE | // 前景色_蓝色 23 FOREGROUND_INTENSITY | // 前景色_加强 24 COMMON_LVB_UNDERSCORE); // 添加下划线 25 printf("文字蓝色,再加个下划线.\n"); 26 27 SetConsoleTextAttribute(hOut, 28 FOREGROUND_RED | // 前景色_红色 29 FOREGROUND_INTENSITY | // 前景色_加强 30 BACKGROUND_BLUE ); // 背景色_蓝色 31 printf("设置文字红色,背景蓝色\n"); 32 33 SetConsoleTextAttribute(hOut, 34 FOREGROUND_RED | // 前景色_红色 35 FOREGROUND_INTENSITY | // 前景色_加强 36 COMMON_LVB_GRID_LVERTICAL );// 网格_左_竖 37 printf(" 加 左 网格\n"); 38 39 SetConsoleTextAttribute(hOut, 40 FOREGROUND_RED | // 前景色_红色 41 FOREGROUND_INTENSITY | // 前景色_加强 42 COMMON_LVB_GRID_RVERTICAL );// 网格_右_竖 43 printf(" 加 右 网格\n"); 44 45 SetConsoleTextAttribute(hOut, 46 FOREGROUND_RED | // 前景色_红色 47 FOREGROUND_GREEN | // 前景色_绿色 48 FOREGROUND_BLUE ); // 前景色_蓝色 49 printf("改回白色\n"); 50 51 system("pause"); 52 return 0; 53 }