📅  最后修改于: 2023-12-03 14:59:48.542000             🧑  作者: Mango
在 C++ 中控制台颜色的使用可以让输出更具可读性,同时也可以用于美化终端界面。本文将介绍如何在 C++ 中使用控制台颜色。
在 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 使用 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 转义序列设置控制台颜色。