这里引入一个设置文本属性的函数,原型如下
BOOL SetConsoleTextAttribute( // 设置WriteConsole等函数的字符属性
HANDLE hConsoleOutput, // 句柄
WORD wAttributes // 文本属性
);
顺便说一句c语言控制台背景色,text 属性实际上是一个颜色属性。有两种类型:背景色和前景色(即字符的颜色)。每种仅提供三基色(红、绿、蓝)和增强色(灰色c语言控制台背景色,可与其他颜色组合使用,以提亮色彩,后面会提到)。最后还有一个反色(不知道这个怎么用,很奇怪的东西)。示例程序如下:
#include
#include
#include
#include
/*
基本文本属性
FOREGROUND_BLUE 蓝色
FOREGROUND_GREEN 绿色
FOREGROUND_RED 红色
FOREGROUND_INTENSITY 加强
BACKGROUND_BLUE 蓝色背景
BACKGROUND_GREEN 绿色背景
BACKGROUND_RED 红色背景
BACKGROUND_INTENSITY 背景色加强
COMMON_LVB_REVERSE_VIDEO 反色
*/
const WORD FORE_BLUE = FOREGROUND_BLUE; //蓝色文本属性
const WORD FORE_GREEN = FOREGROUND_GREEN; //绿色文本属性
const WORD FORE_RED = FOREGROUND_RED; //红色文本属性
const WORD FORE_PURPLE = FORE_BLUE | FORE_RED; //紫色文本属性
const WORD FORE_CYAN = FORE_BLUE | FORE_GREEN; //青色文本属性
const WORD FORE_YELLOW = FORE_RED | FORE_GREEN; //黄色文本属性
const WORD FORE_GRAY = FOREGROUND_INTENSITY; //灰色文本属性
const WORD BACK_BLUE = BACKGROUND_BLUE; //蓝色背景属性
const WORD BACK_GREEN = BACKGROUND_GREEN; //绿色背景属性
const WORD BACK_RED = BACKGROUND_RED; //绿色背景属性
const WORD BACK_PURPLE = BACK_BLUE | BACK_RED; //紫色背景属性
const WORD BACK_CYAN = BACK_BLUE | BACK_GREEN; //青色背景属性
const WORD BACK_YELLOW = BACK_RED | BACK_GREEN; //黄色背景属性
const WORD BACK_GRAY = BACKGROUND_INTENSITY; //灰色背景属性
int main()
{
HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
SetConsoleTextAttribute(handle_out, FORE_BLUE);
printf("蓝色字符n");
SetConsoleTextAttribute(handle_out, FORE_RED);
printf("红色字符n");
SetConsoleTextAttribute(handle_out, FORE_GREEN);
printf("绿色字符n");
SetConsoleTextAttribute(handle_out, FORE_PURPLE);
printf("紫色字符n");
SetConsoleTextAttribute(handle_out, FORE_CYAN);
printf("青色字符n");
SetConsoleTextAttribute(handle_out, FORE_YELLOW);
printf("黄色字符n");
SetConsoleTextAttribute(handle_out, FORE_GRAY);
printf("灰色字符n");
SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED);
printf("白色字符n");
SetConsoleTextAttribute(handle_out, BACK_BLUE);
printf("蓝色背景n");
SetConsoleTextAttribute(handle_out, BACK_RED);
printf("红色背景n");
SetConsoleTextAttribute(handle_out, BACK_GREEN);
printf("绿色背景n");
SetConsoleTextAttribute(handle_out, BACK_PURPLE);
printf("紫色背景n");
SetConsoleTextAttribute(handle_out, BACK_CYAN);
printf("青色背景n");
SetConsoleTextAttribute(handle_out, BACK_YELLOW);
printf("黄色背景n");
SetConsoleTextAttribute(handle_out, BACK_GRAY);
printf("灰色背景n");
SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN);
printf("白色背景n");
SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //示例:绿色背景红色字符
printf("绿色背景与红色字符的混合n");
SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED); //示例:亮红色字符
printf("亮色的生成,与加强色融合n");
return 0;
}
上面的示例程序最好用C++编译,因为有些C语言编译器或者IDE不支持上面定义常量的方式。从这个例子中需要理解的是,三基色是使用按位 OR | 混合的。 C语言位操作中的操作符,背景颜色和字符颜色也是用这个操作符定义的。另外,任何一种颜色与对应增强色(灰色,有前景和背景两种,需要对应)的融合都会成为对应颜色的高亮版本,例如红色字符和前景增强的融合颜色会组合成鲜红色。
至于反色,你可以试试。当我将文本属性设置为反色时,输入的字符不显示,但下标仍在移动。我猜反色会将白色字符变成黑色字符。与黑色背景相同,因此不显示。至于反色等组合和其他颜色组合,还需要大家一起探索,,,
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网