本文共 2582 字,大约阅读时间需要 8 分钟。
最近写的一个程序需要在Console窗口中输出大量信息。信息杂乱无章,看起来不够专业。于是,我决定对不同类型的信息采用不同的颜色进行区分,使输出更加直观易读。
在研究相关方法时,我了解到Windows API中有一个不错的解决方案——SetConsoleTextAttribute函数。为了让使用更方便,我将这个API函数进行了简单的封装。
下面是实现代码:
#includeenum ConsoleTextColor { CTC_RED = FOREGROUND_INTENSITY | FOREGROUND_RED, CTC_GREEN = FOREGROUND_INTENSITY | FOREGROUND_GREEN, CTC_BLUE = FOREGROUND_INTENSITY | FOREGROUND_BLUE, CTC_YELLOW = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN, CTC_PURPLE = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE, CTC_CYAN = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE, CTC_WHITE = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, CTC_BLACK = 0};enum ConsoleBackGroundColor { CBC_RED = BACKGROUND_INTENSITY | BACKGROUND_RED, CBC_GREEN = BACKGROUND_INTENSITY | BACKGROUND_GREEN, CBC_BLUE = BACKGROUND_INTENSITY | BACKGROUND_BLUE, CBC_YELLOW = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN, CBC_PURPLE = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE, CBC_CYAN = BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE, CBC_WHITE = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE, CBC_BLACK = 0};void setConsoleColor(ConsoleTextColor textColor, ConsoleBackGroundColor backgroundColor) { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, textColor | backgroundColor);}
这是一个极为简洁的实现,主要包括两部分枚举类型和一个功能封装。setConsoleColor函数接收两个参数,分别指定文字颜色和背景颜色,默认值分别为白色和黑色。
下面是一个测试用例:
int main(int argc, char *argv[]) { setConsoleColor(CTC_RED); cout << "红色字体,黑色背景" << endl; setConsoleColor(CTC_GREEN); cout << "绿色字体,黑色背景" << endl; setConsoleColor(CTC_BLUE); cout << "蓝色字体,黑色背景" << endl; setConsoleColor(CTC_PURPLE); cout << "紫色字体,黑色背景" << endl; setConsoleColor(CTC_CYAN); cout << "蓝绿色字体,黑色背景" << endl; setConsoleColor(CTC_BLUE, CBC_RED); cout << "蓝色字体,红色背景" << endl; setConsoleColor(CTC_BLACK, CBC_WHITE); cout << "黑色字体,白色背景" << endl; setConsoleColor(CTC_BLACK, CBC_CYAN); cout << "黑色字体,蓝绿色背景" << endl; setConsoleColor(); cout << "白色字体,黑色背景" << endl;} 运行这个程序,输出结果如下:
这个代码设计非常简洁,使用ConsoleTextColor和ConsoleBackGroundColor枚举类型,通过简单的按位或操作即可实现不同颜色的显示效果。需要注意的是,setConsoleColor函数的默认参数设置为白色文字和黑色背景,为了保持一致性,在调用时可以选择不设置颜色参数。
如果使用C++编译器,可能会遇到一些问题,主要是由于函数参数的默认值在C语言中是不支持的。因此,可以通过在函数定义时添加= { CTC_WHITE, CBC_BLACK }来实现默认参数。
转载地址:http://jzrfk.baihongyu.com/