Win32控制台彩色字符输出
Posted mathtimes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Win32控制台彩色字符输出相关的知识,希望对你有一定的参考价值。
我记得,原则上,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 }
2. 使用终端
3. Linux虚拟bash
以上是关于Win32控制台彩色字符输出的主要内容,如果未能解决你的问题,请参考以下文章
使用 ANSI / VT100 代码在 PowerShell 控制台中输出彩色文本