为控制台项目添加颜色






4.86/5 (67投票s)
通过使用几个辅助函数,可以在 Win32 下运行的控制台应用程序中添加颜色。

引言
标准的 C++ iostream 库不了解颜色。因此,控制台应用程序往往看起来非常单调,并且经常无法强调文本洪流中的重要部分。由于我通常使用控制台应用程序进行单元测试,因此我希望输入条件和测试结果能够突出显示并易于解释(例如,绿色表示 PASSED,红色表示 FAIL)。
Win32 API 有一些函数可以操作控制台中字符的颜色,但这些是 C 风格的函数,与 C++ 流风格编程的接口并不无缝。此外,我希望保持我的主代码简洁明了。阅读我的测试用例的任何人都不应该在数十行输出格式化代码中苦苦挣扎。
为此,我创建了一组方便的 iostream 操纵符,允许我在输出流中的任何位置更改背景和前景颜色。
Using the Code
所有必要的代码都包含在一个头文件中:Console.h。为了防止名称冲突,此文件中的函数放置在一个单独的命名空间中:“JadedHoboConsole”。
如下面的代码片段所示,使用 iostream 颜色操纵符非常简单。
#include "Console.h"
namespace con = JadedHoboConsole;
int main()
{
    using std::cout;
    using std::endl;
    cout << "I like " << con::fg_green << "green" << con::fg_white << " eggs and ham." 
         << endl;
}
头文件具有用于设置背景颜色(那些以 bg_ 开头)和设置前景色(那些以 fg_ 为前缀)的流操纵符。此外,我创建了一个用于清除屏幕的操纵符(clr)。
这是可用的操纵符列表
- fg_black
- fg_gray
- fg_white
- fg_reg
- fg_green
- fg_blue
- fg_cyan
- fg_magenta
- fg_yellow
- bg_black
- bg_gray
- bg_white
- bg_reg
- bg_green
- bg_blue
- bg_cyan
- bg_magenta
- bg_yellow
- clr
关注点
新的 iostream 操纵符很容易实现,因为最重要的部分已经在标准化委员会在标准中包含 basic_ostream& operator<<( basic_ostream& (*pf)(basic_ostream&)); 重载时完成了。
std::ostream& Copyleft( std::ostream& os )
{
    os << "(L)2004 by EgoTripper";
}
cout << Copyleft << endl;
历史
- 2004 年 12 月:首次发布
- 2009 年 11 月:文章已更新


