如何使用 COLOR RGB 代码为控制台背景着色?

How to colorize console background with COLOREF RGB code?

在这里我问你:我们应该如何仅使用 COLOREF 数据类型作为参数来为控制台背景着色?

最常用的背景着色方法是使用 windows header 函数 system("color --")

但是,这种方法是行不通的,我的任务是找出我们是否可以仅使用 COLOREF 数据类型来为控制台背景着色。

我做了一些研究,我遇到的是 SetConsoleAttribute()windows header 函数 system("color --")

我希望我的代码是这样的:

COLOREF data = RGB(255, 0, 0);//red, basically

SetConsoleBackground(HDC *console, data);

有什么办法吗?提前致谢。

[新答案(编辑)] 所以@IInspectable 指出控制台现在支持 24 位全 rgb 颜色,所以我做了一些研究并设法让它工作。 我就是这样解决的:

#include <Windows.h>
#include <string>
struct Color
{
    int r;
    int g;
    int b;
};

void SetBackgroundColor(const Color& aColor)
{
    std::string modifier = "\x1b[48;2;" + std::to_string(aColor.r) + ";" + std::to_string(aColor.g) + ";" + std::to_string(aColor.b) + "m";
    printf(modifier.c_str());
}

void SetForegroundColor(const Color& aColor)
{
    std::string modifier = "\x1b[38;2;" + std::to_string(aColor.r) + ";" + std::to_string(aColor.g) + ";" + std::to_string(aColor.b) + "m";
    printf(modifier.c_str());
}
int main()
{
    // Set output mode to handle virtual terminal sequences
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    DWORD dwMode = 0;
    GetConsoleMode(hOut, &dwMode);

    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hOut, dwMode);

    SetForegroundColor({ 100,100,20 });
    SetBackgroundColor({ 50,100,10 });
    printf("Hello World\n");

    system("pause");
}

[旧答案] 控制台只支持 256 种不同的颜色组合,用一个 8 位长的 WORD 定义。背景颜色存储在高 4 位中。这意味着控制台仅支持 16 种不同的颜色:

enum class Color : int
{
    Black = 0,
    DarkBlue = 1,
    DarkGreen = 2,
    DarkCyan = 3,
    DarkRed = 4,
    DarkPurple = 5,
    DarkYellow = 6,
    DarkWhite = 7,
    Gray = 8,
    Blue = 9,
    Green = 10,
    Cyan = 11,
    Red = 12,
    Purple = 13,
    Yellow = 14,
    White = 15,
};

要设置输入字符的背景颜色,您可以这样做:

void SetWriteColor(const Color& aColor)
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, static_cast<WORD>(aColor) << 4);
}