📅  最后修改于: 2023-12-03 14:51:14.585000             🧑  作者: Mango
在C++中,我们可以使用控制台输出色彩来丰富我们的应用程序。这可以帮助提高用户体验并可视化输出。下面将介绍如何在C++中为文本和控制台背景着色。
要为文本着色,可以使用Windows API中的SetConsoleTextAttribute函数。这可以更改当前文本颜色和背景颜色。只需在输出数据之前更改颜色,然后恢复默认颜色即可。
#include <iostream>
#include <windows.h>
int main()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// 设置文本为红色,背景为黑色
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
std::cout << "This text is red!" << std::endl;
// 恢复默认颜色
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
std::cout << "This text is default color." << std::endl;
return 0;
}
输出:
上述代码使用GetStdHandle函数获取标准输出句柄,然后使用SetConsoleTextAttribute函数设置颜色。您可以在此处更改颜色选项。为了恢复默认颜色,请使用默认颜色值再次调用SetConsoleTextAttribute。
要为控制台背景着色,可以使用SetConsoleCursorPosition函数和FillConsoleOutputAttribute函数。 SetConsoleCursorPosition将光标移动到要更改背景的位置。 FillConsoleOutputAttribute将在该位置之后将颜色应用于指定数量的字符。
#include <iostream>
#include <windows.h>
int main()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
if (!GetConsoleScreenBufferInfo(hConsole, &consoleInfo))
{
return 1;
}
// 获取当前控制台缓冲区大小
COORD bufferSize = consoleInfo.dwSize;
const int consoleWidth = bufferSize.X;
const int consoleHeight = bufferSize.Y;
// 创建一个填充整个控制台缓冲区的矩形区域
SMALL_RECT rect;
rect.Top = 0;
rect.Left = 0;
rect.Right = consoleWidth - 1;
rect.Bottom = consoleHeight - 1;
// 设置为蓝色背景
SetConsoleCursorPosition(hConsole, {0, 0});
FillConsoleOutputAttribute(hConsole, BACKGROUND_BLUE,
consoleWidth * consoleHeight, {0, 0}, nullptr);
// 恢复默认背景颜色
SetConsoleCursorPosition(hConsole, {0, 0});
FillConsoleOutputAttribute(hConsole, BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE,
consoleWidth * consoleHeight, {0, 0}, nullptr);
return 0;
}
输出:
上述代码使用GetConsoleScreenBufferInfo函数获取有关当前控制台缓冲区的信息,并计算控制台宽度和高度。然后使用SetConsoleCursorPosition函数将光标移到左上角,并使用FillConsoleOutputAttribute函数将颜色应用于整个屏幕。要恢复默认背景颜色,只需再次调用FillConsoleOutputAttribute并将默认颜色作为参数。
现在您已经了解如何在C++中为文本和控制台背景着色。这将有助于提高您的应用程序用户体验并且让输出更加可视化。