本文为转载文档,原文档链接: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;
- }
顶
0
踩