您的位置:首页 > 其它

控制台界面控制(五):文字颜色

2016-01-07 19:34 295 查看
本文为转载文档,原文档链接:http://blog.csdn.net/bnb45/article/details/7994025

设置字符属性
VC控制台提供了一个设置文本属性的函数,它的作用包括设置文本颜色,设置文本背景颜色,以及下划线等。

[cpp] view
plaincopy

BOOL SetConsoleTextAttribute(

HANDLE hConsoleOutput, // 句柄

WORD wAttributes // 文本属性

);

文本属性包含以下内容:

[cpp] view
plaincopy

FOREGROUND_BLUE // 文本颜色包含蓝色

FOREGROUND_GREEN // 文本颜色包含绿色

FOREGROUND_RED // 文本颜色包含红色

FOREGROUND_INTENSITY // 文本颜色加亮

BACKGROUND_BLUE // 背景含蓝色

BACKGROUND_GREEN // 背景含绿色

BACKGROUND_RED // 背景含红色

BACKGROUND_INTENSITY // 背景加亮

COMMON_LVB_LEADING_BYTE // 首字节

COMMON_LVB_TRAILING_BYTE // 末字节

COMMON_LVB_GRID_HORIZONTAL // 首行

COMMON_LVB_GRID_LVERTICAL // 左列

COMMON_LVB_GRID_RVERTICAL // 右列

COMMON_LVB_REVERSE_VIDEO // 翻转前景及背景属性

COMMON_LVB_UNDERSCORE // 下划线

设置文本颜色及设置文本背景颜色
就目前看来,我只需要两个功能就可以了。一个是对输出文本的颜色控制,另一个是文本的背景颜色。通过一些方法把它们从原先的函数中分离开来。

[cpp] view
plaincopy

// ---- 在头文件中枚举基本颜色常数,使用它们来设置颜色

enum TEXT_COLOR{

BLACK = 0,

RED = 1,

BLUE = 2,

GREEN = 4,

};

[cpp] view
plaincopy

public:

// ---- 设置文本(背景)颜色

// @param int [in] 颜色属性,TEXT_COLOR常量组合使用时会转化为int

// @param bool = flase [in] 颜色是否加亮

void SetTextColor(int color, bool bIntensity=false);

void SetTextBackgroundColor(int color, bool bIntencity=false);

private:

// -- 头文件中声明两个成员变量,用来存放当前文本的颜色信息

// -- 避免设置文本颜色的时候无法设置背景颜色的情况

WORD wTextColor;

WORD wTextBackgroundColor;

代码实现

[cpp] view
plaincopy

// ---- 设置输出的文本颜色

void CMyConsole::SetTextColor(int color, bool bIntensity)

{

wTextColor = 0;

if (color & RED)

{

wTextColor |= FOREGROUND_RED;

}

if (color & BLUE)

{

wTextColor |= FOREGROUND_BLUE;

}

if (color & GREEN)

{

wTextColor |= FOREGROUND_GREEN;

}

if (bIntensity)

{

wTextColor |= FOREGROUND_INTENSITY;

}

// -- 设置 WriteConsole 等函数的字符属性

// @param HANDLE [in] 控制台句柄

// @param WORD [in] 文本属性

// #return bool

SetConsoleTextAttribute(hOut, wTextColor | wTextBackgroundColor);

};

// ---- 设置输出文本的背景颜色

void CMyConsole::SetTextBackgroundColor(int color, bool bIntensity)

{

wTextBackgroundColor = 0;

if (color & RED)

{

wTextBackgroundColor |= BACKGROUND_RED;

}

if (color & BLUE)

{

wTextBackgroundColor |= BACKGROUND_BLUE;

}

if (color & GREEN)

{

wTextBackgroundColor |= BACKGROUND_GREEN;

}

if (bIntensity)

{

wTextBackgroundColor |= BACKGROUND_INTENSITY;

}

// -- 设置 WriteConsole 等函数的字符属性

SetConsoleTextAttribute(hOut, wTextColor | wTextBackgroundColor);

};

实例测试

[cpp] view
plaincopy

int main()

{

CMyConsole myConsole;

myConsole.SetTextColor(RED);

printf("这是红字\n");

myConsole.SetTextColor(RED, true);

printf("这是加亮红字\n");

myConsole.SetTextColor(RED|BLUE, true);

printf("这是加亮紫字\n");

myConsole.SetTextColor(BLACK);

myConsole.SetTextBackgroundColor(RED|BLUE|GREEN);

printf("这是白底黑字\n");

myConsole.SetTextColor(GREEN);

myConsole.SetTextBackgroundColor(RED|BLUE|GREEN, true);

printf("加亮白底绿字 ");

system("pause");

return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: