博客
关于我
C 语言设置 Console 文字和背景的颜色的方法
阅读量:798 次
发布时间:2023-04-03

本文共 2582 字,大约阅读时间需要 8 分钟。

最近写的一个程序需要在Console窗口中输出大量信息。信息杂乱无章,看起来不够专业。于是,我决定对不同类型的信息采用不同的颜色进行区分,使输出更加直观易读。

在研究相关方法时,我了解到Windows API中有一个不错的解决方案——SetConsoleTextAttribute函数。为了让使用更方便,我将这个API函数进行了简单的封装。

下面是实现代码:

#include 
enum 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;
}

运行这个程序,输出结果如下:

  • 红色字体,黑色背景
  • 绿色字体,黑色背景
  • 蓝色字体,黑色背景
  • 紫色字体,黑色背景
  • 蓝绿色字体,黑色背景
  • 蓝色字体,红色背景
  • 黑色字体,白色背景
  • 黑色字体,蓝绿色背景
  • 白色字体,黑色背景

这个代码设计非常简洁,使用ConsoleTextColorConsoleBackGroundColor枚举类型,通过简单的按位或操作即可实现不同颜色的显示效果。需要注意的是,setConsoleColor函数的默认参数设置为白色文字和黑色背景,为了保持一致性,在调用时可以选择不设置颜色参数。

如果使用C++编译器,可能会遇到一些问题,主要是由于函数参数的默认值在C语言中是不支持的。因此,可以通过在函数定义时添加= { CTC_WHITE, CBC_BLACK }来实现默认参数。

转载地址:http://jzrfk.baihongyu.com/

你可能感兴趣的文章
Oracle分析函数之LEAD和LAG
查看>>
Oracle分组取前n条记录
查看>>
Oracle创建database link(dblink)和同义词(synonym)
查看>>
oracle创建数据库的步骤
查看>>
Oracle创建用户、角色、授权、建表
查看>>
Oracle创建用户与授予表空间与权限
查看>>
oracle创建表(并且实现ID自增)
查看>>
oracle删除重复数据保留第一条记录
查看>>
oracle判断空值的函数nvl2,【PL/SQL】 NVL,NVL2,COALESCE 三种空值判断函数
查看>>
Oracle发布VirtualBox 7.1稳定版!支持ARM、优化了UI、支持Wayland等
查看>>
oracle启动三步
查看>>
oracle启动关闭服务,启动关闭oracle服务.bat
查看>>
Oracle命令行创建数据库
查看>>
Oracle和SQL server的数据类型比较
查看>>
oracle和sybase的一些区别
查看>>
oracle在日本遇到的技术问题
查看>>
Oracle在线重定义
查看>>
oracle基础 管理索引
查看>>
oracle复习(一)
查看>>
ORACLE多表关联UPDATE 语句
查看>>