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

news/2024/7/6 6:33:07

本文为转载文档,原文档链接:http://blog.csdn.net/bnb45/article/details/7994025

 

 

设置字符属性

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

 

[cpp] view plaincopy

  1. BOOL SetConsoleTextAttribute(  
  2.     HANDLE  hConsoleOutput,     // 句柄  
  3.     WORD    wAttributes         // 文本属性  
  4. );  

文本属性包含以下内容:

 

[cpp] view plaincopy

  1. FOREGROUND_BLUE         // 文本颜色包含蓝色  
  2. FOREGROUND_GREEN        // 文本颜色包含绿色  
  3. FOREGROUND_RED          // 文本颜色包含红色  
  4.   
  5. FOREGROUND_INTENSITY    // 文本颜色加亮  
  6.   
  7. BACKGROUND_BLUE         // 背景含蓝色  
  8. BACKGROUND_GREEN        // 背景含绿色  
  9. BACKGROUND_RED          // 背景含红色  
  10.   
  11. BACKGROUND_INTENSITY    // 背景加亮  
  12.   
  13. COMMON_LVB_LEADING_BYTE     // 首字节  
  14. COMMON_LVB_TRAILING_BYTE    // 末字节  
  15. COMMON_LVB_GRID_HORIZONTAL  // 首行  
  16. COMMON_LVB_GRID_LVERTICAL   // 左列  
  17. COMMON_LVB_GRID_RVERTICAL   // 右列  
  18. COMMON_LVB_REVERSE_VIDEO    // 翻转前景及背景属性  
  19. COMMON_LVB_UNDERSCORE       // 下划线  

 

设置文本颜色及设置文本背景颜色

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

 

[cpp] view plaincopy

  1. // ---- 在头文件中枚举基本颜色常数,使用它们来设置颜色  
  2. enum TEXT_COLOR{  
  3.     BLACK   = 0,  
  4.     RED     = 1,  
  5.     BLUE    = 2,  
  6.     GREEN   = 4,  
  7. };  

[cpp] view plaincopy

  1. public:  
  2. // ---- 设置文本(背景)颜色  
  3. // @param   int             [in] 颜色属性,TEXT_COLOR常量组合使用时会转化为int  
  4. // @param   bool = flase    [in] 颜色是否加亮  
  5. void SetTextColor(int color, bool bIntensity=false);  
  6. void SetTextBackgroundColor(int color, bool bIntencity=false);  
  7.   
  8. private:  
  9. // -- 头文件中声明两个成员变量,用来存放当前文本的颜色信息  
  10. // -- 避免设置文本颜色的时候无法设置背景颜色的情况  
  11. WORD wTextColor;  
  12. WORD wTextBackgroundColor;  

代码实现

[cpp] view plaincopy

  1. // ---- 设置输出的文本颜色  
  2. void CMyConsole::SetTextColor(int color, bool bIntensity)  
  3. {  
  4.     wTextColor = 0;  
  5.   
  6.     if (color & RED)  
  7.     {  
  8.         wTextColor |= FOREGROUND_RED;  
  9.     }  
  10.     if (color & BLUE)  
  11.     {  
  12.         wTextColor |= FOREGROUND_BLUE;  
  13.     }  
  14.     if (color & GREEN)  
  15.     {  
  16.         wTextColor |= FOREGROUND_GREEN;  
  17.     }  
  18.     if (bIntensity)  
  19.     {  
  20.         wTextColor |= FOREGROUND_INTENSITY;  
  21.     }  
  22.   
  23.     // -- 设置 WriteConsole 等函数的字符属性  
  24.     // @param   HANDLE      [in] 控制台句柄  
  25.     // @param   WORD        [in] 文本属性  
  26.     // #return  bool               
  27.     SetConsoleTextAttribute(hOut, wTextColor | wTextBackgroundColor);  
  28. };  
  29.   
  30. // ---- 设置输出文本的背景颜色  
  31. void CMyConsole::SetTextBackgroundColor(int color, bool bIntensity)  
  32. {  
  33.     wTextBackgroundColor = 0;  
  34.   
  35.     if (color & RED)  
  36.     {  
  37.         wTextBackgroundColor |= BACKGROUND_RED;  
  38.     }  
  39.     if (color & BLUE)  
  40.     {  
  41.         wTextBackgroundColor |= BACKGROUND_BLUE;  
  42.     }  
  43.     if (color & GREEN)  
  44.     {  
  45.         wTextBackgroundColor |= BACKGROUND_GREEN;  
  46.     }  
  47.     if (bIntensity)  
  48.     {  
  49.         wTextBackgroundColor |= BACKGROUND_INTENSITY;  
  50.     }  
  51.   
  52.     // -- 设置 WriteConsole 等函数的字符属性  
  53.     SetConsoleTextAttribute(hOut, wTextColor | wTextBackgroundColor);  
  54. };  

实例测试

[cpp] view plaincopy

  1. int main()  
  2. {  
  3.     CMyConsole myConsole;  
  4.   
  5.     myConsole.SetTextColor(RED);  
  6.     printf("这是红字\n");  
  7.     myConsole.SetTextColor(RED, true);  
  8.     printf("这是加亮红字\n");  
  9.     myConsole.SetTextColor(RED|BLUE, true);  
  10.     printf("这是加亮紫字\n");  
  11.     myConsole.SetTextColor(BLACK);  
  12.     myConsole.SetTextBackgroundColor(RED|BLUE|GREEN);  
  13.     printf("这是白底黑字\n");  
  14.   
  15.     myConsole.SetTextColor(GREEN);  
  16.     myConsole.SetTextBackgroundColor(RED|BLUE|GREEN, true);  
  17.     printf("加亮白底绿字 ");  
  18.     system("pause");  
  19.     return 0;  
  20. }  

0

 

 

 


http://www.niftyadmin.cn/n/3656344.html

相关文章

Calculator.NET 2.3发布

科学计算器 2.3发布简介支持表达式计算的科学计算器。完全可以替代Windows自带的计算器,使用起来更加人性化。支持变量保存、三角函数运算、指幂运算、角度弧度转换,除了Windows计算器的进制计算不支持外,其他的功能都已经实现。关于我为什么…

理解Session State模式+ASP.NET SESSION丢失FAQ [翻译]

作者:Patrick Y. Ng原文地址:http://forums.asp.net/7504/ShowPost.aspx译者:Tony Qu (来自BluePrint翻译团队)原文最后一次更新:2004年9月21日本文被分成两部分:1.“理解Session State模式”——帮助你理解三种Sessio…

控制台界面控制(六):边框

本文为转载文档&#xff0c;源文档地址&#xff1a;http://blog.csdn.net/bnb45/article/details/7997603 效果 [cpp] view plaincopy #include "MyConsole.h" #include <stdio.h> int main() { CMyConsole myConsole; SMALL_RECT rc {5, 5…

控制台界面控制(七):移动文本

本文为转载文档&#xff0c;原文链接&#xff1a;http://blog.csdn.net/bnb45/article/details/8034597 控制文本的移动&#xff0c;可以取代清屏再重绘操作。如果用来做文本编辑器的滚动条是很合适的&#xff0c;也许也可以用在俄罗斯方块上面。控制台使用一个函数把某个区域内…

[winform入门级好书]c# Windows Forms程序设计

书名&#xff1a;c# Windows Forms程序设计作者&#xff1a;Erik Brown[美]译者&#xff1a;朱毓斌、吴飞出版社&#xff1a;清华大学出版社售价&#xff1a;78元个人书评&#xff1a;本书操作步骤详细&#xff0c;完全可以与step by step级的书相媲美&#xff0c;而且涉及了许…

控制台界面控制(八):光标设置

本文为转载文档&#xff0c;源文档链接&#xff1a;http://blog.csdn.net/bnb45/article/details/8034641 光标的作用在于提醒使用者&#xff0c;你的输入将会在这个位置出现。目前对于光标的操作只有一个&#xff0c;移动光标&#xff0c;改变输出的位置。有时候光标在那里一闪…

Python脚本小工具之文件与内容搜索

目录 一、前言 二、代码 三、结果 一、前言 ​日常工作中&#xff0c;经常需要在指定路径下查找指定类型的文件&#xff0c;或者是指定内容的查找&#xff0c;在window环境中&#xff0c;即可以使用一些工具如notepad或everything&#xff0c;也可以使用python脚本。但在l…

[翻译]脚本引擎实现 - 第四部分 符号表和文法树

原文地址&#xff1a;http://www.flipcode.com/articles/scripting_issue04.shtml 作者&#xff1a;Jan Niestadt译者&#xff1a;Tony Qu介绍既然我们在上两部分中做了一些有益的事&#xff0c;我们就需要把我们从程序的数据结构中收集的数据保存起来&#xff0c;这就是我们接…