📜  在C ++中为文本和控制台背景着色(1)

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

在C++中为文本和控制台背景着色

在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;
}

输出:

color_text.png

上述代码使用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;
}

输出:

color_background.png

上述代码使用GetConsoleScreenBufferInfo函数获取有关当前控制台缓冲区的信息,并计算控制台宽度和高度。然后使用SetConsoleCursorPosition函数将光标移到左上角,并使用FillConsoleOutputAttribute函数将颜色应用于整个屏幕。要恢复默认背景颜色,只需再次调用FillConsoleOutputAttribute并将默认颜色作为参数。

现在您已经了解如何在C++中为文本和控制台背景着色。这将有助于提高您的应用程序用户体验并且让输出更加可视化。