📜  cmd color text c++(1)

📅  最后修改于: 2023-12-03 15:30:01.746000             🧑  作者: Mango

在命令行中使用C++输出彩色文本

在命令行中输出彩色文本可以增加程序的可读性和美观性。本文将介绍如何在C++中使用命令行输出彩色文本。

使用ANSI转义序列

ANSI转义序列是一系列控制字符,可以控制终端的颜色、位置、样式等。在C++中,可以使用转义序列来输出彩色文本。

转义序列格式

转义序列由一个转义字符(十进制的27,十六进制的0x1B,或者八进制的033)和一组参数和命令字符组成。

\033[参数1;参数2;...m命令字符

其中\033可以使用\e\x1B替代,参数1和参数2代表控制序列的参数,命令字符代表对终端的控制命令。

输出彩色文本

在输出彩色文本之前,需要使用转义序列设置终端的颜色。以下是一些常用的颜色代码:

| 颜色代码 | 颜色 | | --- | --- | | 30 | 黑色 | | 31 | 红色 | | 32 | 绿色 | | 33 | 黄色 | | 34 | 蓝色 | | 35 | 洋红色 | | 36 | 青色 | | 37 | 白色 |

对于前景色(即字符颜色),可以在颜色代码前面加上1,表示高亮,或者加上4,表示下划线。例如,31代表红色,1;31代表高亮的红色,4;31代表下划线的红色。

对于背景色,可以在颜色代码前面加上4,表示背景色。例如,42代表绿色背景,4;42代表下划线的绿色背景。

以下是使用转义序列输出彩色文本的示例代码:

#include <iostream>
using namespace std;

int main()
{
    cout << "\033[1;31mThis is red text.\033[0m" << endl;
    cout << "\033[4;32mThis is underlined green text.\033[0m" << endl;
    cout << "\033[4;31;42mThis is underlined red text on green background.\033[0m" << endl;
    return 0;
}

输出结果如下:

This is red text.
This is underlined green text.
This is underlined red text on green background.
注意事项

需要注意的是,使用转义序列输出彩色文本可能会因终端的不同而产生不同的效果。另外,使用转义序列可能会导致代码的可移植性差。因此,需要根据实际需求和情况来决定是否使用。

使用Windows Console API

除了使用ANSI转义序列之外,还可以使用Windows Console API来在Windows命令行中输出彩色文本。

设置命令行文本颜色

在Windows中,可以使用SetConsoleTextAttribute函数设置控制台中文本的颜色和背景色。

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(hOut, &csbi);
    WORD wOldColorAttr = csbi.wAttributes;

    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    cout << "This is red text." << endl;
    SetConsoleTextAttribute(hOut, wOldColorAttr);

    return 0;
}

注意,在使用SetConsoleTextAttribute函数修改文本颜色之前需要先保存当前的文本颜色。

设置命令行背景颜色

除了设置文本颜色之外,还可以使用SetConsoleScreenBufferInfo函数来设置命令行的背景颜色。

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(hOut, &csbi);
    WORD wOldColorAttr = csbi.wAttributes;

    SetConsoleTextAttribute(hOut, BACKGROUND_GREEN | BACKGROUND_INTENSITY);
    cout << "This is a green background." << endl;
    SetConsoleTextAttribute(hOut, wOldColorAttr);

    return 0;
}
总结

本文介绍了在C++中使用命令行输出彩色文本的两种方法:使用ANSI转义序列和Windows Console API。当需要在命令行中输出彩色文本时,可以根据实际需求和情况来选择合适的方法。