用C代码设置Windows控制台颜色
【摘要】 使用用C代码设置Windows控制台颜色
Windows控制台颜色
windows控制台中使用COLOR命令设置颜色,使用 COLOR -h 查看具体颜色值。
颜色说明
终端的颜色使用1个字节表示,高4位表示背景色,低4位表示前景色。颜色值范围为0-F,共16种颜色,分别为:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
背景色和前景色可以互相搭配,比如蓝色背景,淡黄色文字表示为0x1D。
颜色示例
-
命令提示符
-
WindowsTerminal终端
由于 WindowsTerminal终端可以自定义配色方案,因此显示的颜色与旧版的命令提示符显示的会有不同。
编程设置控制台颜色
使用Windows控制台API函数SetConsoleTextAttribute设置控制台颜色。
BOOL WINAPI SetConsoleTextAttribute(
_In_ HANDLE hConsoleOutput,
_In_ WORD wAttributes
);
参数
hConsoleOutput [进]
控制台屏幕缓冲区的句柄。 该句柄必须具有 GENERIC_READ 访问权限。
wAttributes [in]
字符属性。
上面函数中要用到控制台句柄,使用Windows控制台API函数GetStdHandle获取控制台句柄。
GetStdHandle 函数
HANDLE WINAPI GetStdHandle(
_In_ DWORD nStdHandle
);
参数
nStdHandle [进]
标准设备。 此参数的取值可为下列值之一:
值 含义
STD_INPUT_HANDLE((DWORD)-10) 标准输入设备。 最初,这是输入缓冲区 CONIN$ 的控制台。
STD_OUTPUT_HANDLE((DWORD)-11) 标准输出设备。 最初,这是活动控制台屏幕缓冲区 CONOUT$。
STD_ERROR_HANDLE((DWORD)-12) 标准错误设备。 最初,这是活动控制台屏幕缓冲区 CONOUT$。
代码
上面图片中各种颜色的实现代码
#include <stdio.h>
#include <windows.h>
//更改颜色
// color为每一种颜色所代表的数字,范围是0~15
void setColor(WORD color)
{
HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄
SetConsoleTextAttribute(HOutput, color); //设置颜色
}
int main()
{
char *CLRNAME[] = {
"黑色",
"蓝色",
"绿色",
"浅绿色",
"红色",
"紫色",
"黄色",
"白色",
"灰色",
"淡蓝色",
"淡绿色",
"淡浅绿色",
"淡红色",
"淡紫色",
"淡黄色",
"亮白色",
};
printf("\n\n\t\t\t\t控制台文字颜色代码:");
printf("\n\n");
for (int i = 0; i <= 7; i++)
{
printf("\t\t");
setColor(i == 0 ? 0xE0 : i);
printf("%2X %-8s 海阔天空\t", i, CLRNAME[i]);
setColor(i + 8);
printf("\t%2X %-8s 海阔天空\n", i + 8, CLRNAME[i + 8]);
}
setColor(0x07); //默认颜色
printf("\n\n\t\t\t\t控制台背景颜色代码:");
printf("\n\n");
for (int i = 0; i <= 7; i++)
{
printf("\t\t");
setColor((i << 4) + (i == 0 ? 0xE : 0)); //把颜色值移到高位设置成背景色
printf("%2X %-20s\t", i, CLRNAME[i]);
setColor(0x07);
printf("\t");
setColor((i + 8) << 4);
printf("%2X %-20s\n", i + 8, CLRNAME[i + 8]);
setColor(0x07);
}
return 0;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)