📜  C++ 中的控制台颜色(1)

📅  最后修改于: 2023-12-03 14:59:48.542000             🧑  作者: Mango

C++ 中的控制台颜色

在 C++ 中控制台颜色的使用可以让输出更具可读性,同时也可以用于美化终端界面。本文将介绍如何在 C++ 中使用控制台颜色。

在 Windows 中设置控制台颜色

在 Windows 中控制台颜色可以使用 SetConsoleTextAttribute 函数来设置。该函数的原型如下:

BOOL SetConsoleTextAttribute(
  HANDLE hConsoleOutput,
  WORD wAttributes
);

其中 hConsoleOutput 是控制台输出缓冲区的句柄,可以使用 GetStdHandle(STD_OUTPUT_HANDLE) 函数获取。wAttributes 参数是前景色和背景色的组合值。下面是一张表格,其中列出了所有可用的控制台颜色及其对应的值:

| 颜色 | 前景色 | 背景色 | | --- | --- | --- | | BLACK | 0 | 0 | | BLUE | 1 | 16 | | GREEN | 2 | 32 | | CYAN | 3 | 48 | | RED | 4 | 64 | | MAGENTA | 5 | 80 | | YELLOW | 6 | 96 | | GRAY | 7 | 112 | | DARK_GRAY | 8 | 128 | | LIGHT_BLUE | 9 | 144 | | LIGHT_GREEN | 10 | 160 | | LIGHT_CYAN | 11 | 176 | | LIGHT_RED | 12 | 192 | | LIGHT_MAGENTA | 13 | 208 | | LIGHT_YELLOW | 14 | 224 | | WHITE | 15 | 240 |

为了将文本输出设置为蓝色,可以调用以下代码:

#include <Windows.h>

int main() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE);
    std::cout << "This text is blue" << std::endl;
    return 0;
}

这将输出带有蓝色前景色的 "This text is blue" 字符串。

在 Linux 和 macOS 中设置控制台颜色

Linux 和 macOS 使用 ANSI 转义序列来设置控制台颜色。下面是一张表格,其中列出了所有可用的控制台颜色及其对应的 ANSI 转义序列:

| 颜色 | 前景色 | 背景色 | | --- | --- | --- | | BLACK | \x1b[30m | \x1b[40m | | RED | \x1b[31m | \x1b[41m | | GREEN | \x1b[32m | \x1b[42m | | YELLOW | \x1b[33m | \x1b[43m | | BLUE | \x1b[34m | \x1b[44m | | MAGENTA | \x1b[35m | \x1b[45m | | CYAN | \x1b[36m | \x1b[46m | | WHITE | \x1b[37m | \x1b[47m | | RESET | \x1b[0m | -- | | BRIGHT_BLACK | \x1b[1;30m | \x1b[1;40m | | BRIGHT_RED | \x1b[1;31m | \x1b[1;41m | | BRIGHT_GREEN | \x1b[1;32m | \x1b[1;42m | | BRIGHT_YELLOW | \x1b[1;33m | \x1b[1;43m | | BRIGHT_BLUE | \x1b[1;34m | \x1b[1;44m | | BRIGHT_MAGENTA | \x1b[1;35m | \x1b[1;45m | | BRIGHT_CYAN | \x1b[1;36m | \x1b[1;46m | | BRIGHT_WHITE | \x1b[1;37m | \x1b[1;47m |

让文本输出为蓝色的代码将如下所示:

#include <iostream>

int main() {
    std::cout << "\x1b[34mThis text is blue\x1b[0m" << std::endl;
    return 0;
}

输出的文本将具有蓝色前景色。

示例代码

下面是一个示例,其中演示了如何在 Windows、Linux 和 macOS 中使用控制台颜色。该代码将输出带有蓝色前景色和灰色背景色的字符串。

#include <iostream>

#ifdef _WIN32
#include <Windows.h>
#else
#define FOREGROUND_BLUE 0x0001
#define BACKGROUND_GRAY 0x0070
#endif

int main() {
#ifdef _WIN32
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | BACKGROUND_GRAY);
#else
    std::cout << "\x1b[34;47m";
#endif

    std::cout << "This text is blue on gray" << std::endl;

#ifdef _WIN32
    SetConsoleTextAttribute(hConsole, FOREGROUND_WHITE);
#else
    std::cout << "\x1b[37m";
#endif

    return 0;
}

程序输出的字符串将具有蓝色前景色和灰色背景色。在 Windows 中使用 SetConsoleTextAttribute 函数设置控制台颜色,而在 Linux 和 macOS 中使用 ANSI 转义序列设置控制台颜色。

参考文献