当前位置:首页 > 编程学习 > 用C代码设置Windows控制台颜色

用C代码设置Windows控制台颜色

编程学习2022-11-0671500


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。

颜色示例

命令提示符

命令提示符 用C代码设置Windows控制台颜色  编程 电脑 技术 第1张

WindowsTerminal终端

WindowsTerminal终端 用C代码设置Windows控制台颜色  编程 电脑 技术 第2张


由于 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$。



C代码

上面图片中各种颜色的实现代码,使用C语言设置控制台颜色。

#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;
}




扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://www.apull.net/html/20221106222055.html

分享给朋友:

相关文章

 C++中指针的使用艺术

C++中指针的使用艺术

C++中指针的使用艺术 在C++编程中使用指针能有速度快,节约内存等优点,是很多C++程序员的最爱。但指针是一把双刃剑,用好了它,你就会发现指针有多么的方便,反之,你可能就头疼了,往往会出现意想不到的问题。   一.什么是指针:   其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针只是一个指示器,它告诉程序在内存的哪块区域可以找到数据。   这是一个非常重要的概念,有很多程序和算法都是围绕指针设计的,如链...

常用asp函数

常用asp函数

<% '------------------------------------- '所有功能函数名如下: ' StrLength(str) 取得字符串长度 ' CutStr(str,strlen) 字符串长度切割 ' CheckIsEmpty(tstr) 检测是否为空 ' isInteger(para) 整数检验 ' CheckName(str) 名字字符校验 ' CheckPassword(str) 密码检验 ' CheckEmail(emai...

HTML与ASCII码表

HTML与ASCII码表

HTML与ASCII码表Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1  Latin alphabet No. 1Browser support: All browsersASCIIHTMLHTMLDecHexSymbolNumberNameDescription32333435363738394041424344454647202122232425262728292A2B...

SetTimer(), KillTimer() 使用

SetTimer(), KillTimer() 使用

SetTimer函数的用法  1 )用WM_TIMER来设置定时器  先请看SetTimer这个API函数的原型  UINT_PTR SetTimer(   HWND hWnd, // 窗口句柄   UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器   UINT uElapse, // 时间间隔,单位为毫秒   TIMERPROC lpTimerFunc // 回调函数   );例如  SetTimer...