ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Win32控制台彩色字符输出

2021-06-18 10:04:35  阅读:296  来源: 互联网

标签:字符 FOREGROUND 前景色 Win32 INTENSITY COMMON BACKGROUND LVB 控制台


我记得,原则上,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 [输入参数]

具体常见设置属性如下:

 

ValueMeaning
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

标签:字符,FOREGROUND,前景色,Win32,INTENSITY,COMMON,BACKGROUND,LVB,控制台
来源: https://www.cnblogs.com/YHFBlogs/p/14898288.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有