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

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

编程学习2022-11-0648900


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://apull.net/html/20221106222055.html

分享给朋友:

相关文章

SHFileOperation介绍

SHFileOperation介绍

SHFileOperation函数功能描述:文件操作,与 Shell 的动作相同.函数原型:#include<shellapi.h> WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);参数:typedef struct _SHFILEOPSTRUCT { HWND hwnd; //父窗口句柄 UINT wFu...

VB.NET 用ShellExecuteEx 打开系统文件属性对话框 模块

VB.NET 用ShellExecuteEx 打开系统文件属性对话框 模块

' ' VB.NET 调用系统文件属性对话框模块 ' ' by: Apull ' QQ:374237545 ' http://www.apull.net ' 2007-6-9 ' ' Imports System.Runtime.InteropServices     Mod...

C++实现十进制转换为二进制

C++实现十进制转换为二进制

这个写得有些早了,学习c++是写的。现在看到很多帖子问这个问题,把这个贴上来供大家参考下。/* * FileName: bin.cpp * * 转换十进制为二进制 * * Apull * 2005-12-2 */ #include <iostream> #include <cstdlib> using namespace std; const int size = sizeof(int) *...

VBScript 错误信息

VBScript 错误信息

错误代码 信息5 无效的过程调用或参数6 溢出7 内存不够9 下标越界10 数组长度固定或临时锁定11 被零除13 类型不匹配14 字符串空间溢出28 堆栈空间溢出35 Sub或Function未定义48 加载D...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。