在VS2015中可以使用system()函数或者SetConsoleTextAttribute()函数设置控制台背景及输出字体颜色,即背景色和前景色。
1 system()函数
system()函数作用唤醒指令处理器来执行系统指令。
1.1函数格式
该函数的格式为
int system(const char* command);
其中,参数command是要执行的系统指令。如果command是NULL,则system()函数返回指令处理器的状态,如果指令处理器处于可用状态,则返回值是非零;如果指令处理器处于非可用状态,则返回值是零。如果command是非NULL,则system()函数返回执行系统指令后的状态码。
1.2 color指令
通过系统指令“color”可以实现控制台颜色的修改。color指令的格式为
color [attr]
其中,attr是指定控制台输出的颜色属性。该颜色属性由两个十六进制数字指定,第一个数字表示背景颜色,第二个数组表示前景颜色。每个数字对应的颜色如图1所示。
图1 数字与颜色的对应关系
1.3相关代码
如果将控制台的颜色改为如图1所示的效果,则可以使用如下代码
system(“color 0A”);
以上代码的含义是将控制台的背景色设置为黑色,前景色设置为淡绿色。需要注意的是,system()函数在stdlib.h头文件中定义。
2 SetConsoleTextAttribute()函数
system()函数会改变改变之前控制台中所有输出的颜色,如果只是修改控制台部分输出的颜色,如图2所示,则需要使用SetConsoleTextAttribute()函数。
图2 修改控制台部分输出的颜色
SetConsoleTextAttribute()函数的作用是设置写入到控制台缓冲区中字符串的属性。
2.1 SetConsoleTextAttribute()函数格式
BOOL WINAPI SetConsoleTextAttribute(
__in HANDLE hConsoleOutput
, __in WORD wAttributes
);
其中,参数hConsoleOutput控制台输出缓冲区的句柄;wAttributes是字符串的属性。如果成功设置字符串属性,则该函数返回非零值,否则返回值是零。
2.2 GetStdHandle()函数
在“2.1 SetConsoleTextAttribute()函数格式”中提到,需要获取控制台输出缓冲区的句柄。通过GetStdHandle()函数即可实现该功能。
2.2.1 函数格式
GetStdHandle()函数的作用是获取指定的标准设备的句柄,其格式为
HANDLE WINAPI GetStdHandle(
__in DWORD nStdHandle
);
其中,nStdHandle是标准的设备,其可能的取值为STD_INPUT_HANDLE、STD_OUTPUT_HANDLE和STD_ERROR_HANDLE,分别表示标准的输入设备、标准输出设备和标准错误处理设备。该函数的返回值即为指定设备的句柄。
2.3 相关代码
如图2所示,在输出离线状态的主机信息时,使用红色字体,在输入在线状态的主机信息时,使用绿色字体。其代码如下所示
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
其中,FOREGROUND_GREEN和FOREGROUND_RED分别表示将控制台的前景色设置为绿色和红色。
需要注意的是,使用SetConsoleTextAttribute()函数和GetStdHandle()函数在Windows.h中定义。