C语言控制台窗口图形界面编程(三)

<知识分享>

在这里介绍一个设置文本属性的函数,原型如下

[cpp] view plaincopy

  1. BOOL SetConsoleTextAttribute(   // 设置WriteConsole等函数的字符属性
  2. HANDLE hConsoleOutput,          // 句柄
  3. WORD wAttributes                // 文本属性
  4. );

顺便提一下文本属性,其实就是颜色属性,有背景色和前景色(就是字符的颜色)两类,每一类只提供三原色(红,绿,蓝)和加强色(灰色,可与其他颜色搭配使用,使颜色变亮,后面会提到)。最后还有一个反色(不太清楚这个到底怎么用,很奇葩的东西)。示例程序如下:

[cpp] view plaincopy

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <conio.h>
  5. /*
  6. 基本文本属性
  7. FOREGROUND_BLUE 蓝色
  8. FOREGROUND_GREEN 绿色
  9. FOREGROUND_RED 红色
  10. FOREGROUND_INTENSITY 加强
  11. BACKGROUND_BLUE 蓝色背景
  12. BACKGROUND_GREEN 绿色背景
  13. BACKGROUND_RED 红色背景
  14. BACKGROUND_INTENSITY 背景色加强
  15. COMMON_LVB_REVERSE_VIDEO 反色
  16. */
  17. const WORD FORE_BLUE   = FOREGROUND_BLUE;           //蓝色文本属性
  18. const WORD FORE_GREEN  = FOREGROUND_GREEN;          //绿色文本属性
  19. const WORD FORE_RED    = FOREGROUND_RED;            //红色文本属性
  20. const WORD FORE_PURPLE = FORE_BLUE | FORE_RED;      //紫色文本属性
  21. const WORD FORE_CYAN   = FORE_BLUE | FORE_GREEN;    //青色文本属性
  22. const WORD FORE_YELLOW = FORE_RED | FORE_GREEN;     //黄色文本属性
  23. const WORD FORE_GRAY   = FOREGROUND_INTENSITY;      //灰色文本属性
  24. const WORD BACK_BLUE   = BACKGROUND_BLUE;           //蓝色背景属性
  25. const WORD BACK_GREEN  = BACKGROUND_GREEN;          //绿色背景属性
  26. const WORD BACK_RED    = BACKGROUND_RED;            //绿色背景属性
  27. const WORD BACK_PURPLE = BACK_BLUE | BACK_RED;      //紫色背景属性
  28. const WORD BACK_CYAN   = BACK_BLUE | BACK_GREEN;    //青色背景属性
  29. const WORD BACK_YELLOW = BACK_RED | BACK_GREEN;     //黄色背景属性
  30. const WORD BACK_GRAY   = BACKGROUND_INTENSITY;      //灰色背景属性
  31. int main()
  32. {
  33. HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄
  34. CONSOLE_SCREEN_BUFFER_INFO csbi;                        //定义窗口缓冲区信息结构体
  35. GetConsoleScreenBufferInfo(handle_out, &csbi);          //获得窗口缓冲区信息
  36. SetConsoleTextAttribute(handle_out, FORE_BLUE);
  37. printf("蓝色字符\n");
  38. SetConsoleTextAttribute(handle_out, FORE_RED);
  39. printf("红色字符\n");
  40. SetConsoleTextAttribute(handle_out, FORE_GREEN);
  41. printf("绿色字符\n");
  42. SetConsoleTextAttribute(handle_out, FORE_PURPLE);
  43. printf("紫色字符\n");
  44. SetConsoleTextAttribute(handle_out, FORE_CYAN);
  45. printf("青色字符\n");
  46. SetConsoleTextAttribute(handle_out, FORE_YELLOW);
  47. printf("黄色字符\n");
  48. SetConsoleTextAttribute(handle_out, FORE_GRAY);
  49. printf("灰色字符\n");
  50. SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED);
  51. printf("白色字符\n");
  52. SetConsoleTextAttribute(handle_out, BACK_BLUE);
  53. printf("蓝色背景\n");
  54. SetConsoleTextAttribute(handle_out, BACK_RED);
  55. printf("红色背景\n");
  56. SetConsoleTextAttribute(handle_out, BACK_GREEN);
  57. printf("绿色背景\n");
  58. SetConsoleTextAttribute(handle_out, BACK_PURPLE);
  59. printf("紫色背景\n");
  60. SetConsoleTextAttribute(handle_out, BACK_CYAN);
  61. printf("青色背景\n");
  62. SetConsoleTextAttribute(handle_out, BACK_YELLOW);
  63. printf("黄色背景\n");
  64. SetConsoleTextAttribute(handle_out, BACK_GRAY);
  65. printf("灰色背景\n");
  66. SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN);
  67. printf("白色背景\n");
  68. SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //示例:绿色背景红色字符
  69. printf("绿色背景与红色字符的混合\n");
  70. SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED);   //示例:亮红色字符
  71. printf("亮色的生成,与加强色融合\n");
  72. return 0;
  73. }

上述示例程序最好用C++来中编译,因为有C语言的编译器或者IDE不支持上述的定义常量的方式。需要从这个示例中了解的是三原色的混合是用C语言位运算中的按位或 | 运算符,背景颜色与字符颜色的同时定义也是使用这个运算符融合。另外,将任意颜色与对应的加强色(灰色,有前景和背景两种,需要对应)融合后会成为对应颜色的高亮版,比如红色字符与前景加强色的融合会结合成亮红色。

至于反色,大家可以试试,当我设置了文本属性为反色后,输入字符都不显示了,但是下标还在移动,我估计反色将白色字符变成了黑色字符,与黑色背景一样,所以没有显示出来。至于反色与其他的组合以及其他的颜色组合,还需要大家一起探索、、、

C语言控制台窗口图形界面编程(三)

时间: 2024-10-18 16:47:05

C语言控制台窗口图形界面编程(三)的相关文章

C语言控制台窗口图形界面编程(八):鼠标事件

<知识分享> 上次讲的是键盘事件,这次我们介绍鼠标事件.下面先介绍下鼠标事件的结构体以及相关信息. typedef struct _MOUSE_EVENT_RECORD      //鼠标事件结构体 { COORD dwMousePosition;      //当前鼠标在控制台窗口缓冲区的位置 DWORD dwButtonState;        //鼠标按键的状态 DWORD dwControlKeyState;    //控制键状态 DWORD dwEventFlags;       

C语言控制台窗口图形界面编程(五).

控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动.下面我们介绍一个控制文本移动的函数,如下: BOOL ScrollConsoleScreenBuffer(             //文本移动函数 HANDLE hConsoleOutput,                  //句柄 const SMALL_RECT *lpScrollRectangle,    //移动区域 const SMALL_RECT *lpClipRectangle,    

C语言控制台窗口图形界面编程(一)

本系列文章改编自<C语言控制台窗口界面编程(修正版)>.本系列文章会抛弃一些原文中难懂难理解且不常用的部分,并修改了部分样例程序.只为了更加清晰地学习C语言的控制台窗口界面编程.而想要更加深入的了解本系列文章,请阅读<C语言控制台窗口界面编程(修正版)>. <C语言控制台窗口界面编程(修正版)>下载地址:http://download.csdn.net/detail/jzqt_t/7471013 在Windows操作系统下用C语言编写控制台的窗口界面首先要获取当前标准输

C语言控制台窗口图形界面编程(二)

下面介绍几个用于控制台窗口操作的API函数,如下: [cpp] view plaincopy //获取控制台窗口信息 GetConsoleScreenBufferInfo(); //获取控制台窗口标题 GetConsoleTitle(); //更改指定缓冲区大小 SetConsoleScreenBufferSize(); //设置控制台窗口标题 SetConsoleTitle(); //设置控制台窗口信息 SetConsoleWindowInfo(); 下面的示例程序用于说明此类函数的使用: [

C语言控制台窗口图形界面编程(总结)

<知识分享(来自我的CSDN)>   :http://blog.csdn.net/jzqt_t/article/details/32225195 本系列文章是笔者通过学习<C语言控制台窗口界面编程(修正版)>而写(关于此文档的更多信息请看本系列文章第一篇),旨在让大家更加清晰简洁容易地学习C语言控制台窗口界面的编程. 通过本系列文章我们可以在控制台窗口中制作好看的图形界面,方便了在非TC开发环境中的控制台窗口中进行文本界面和图形界面的设计,有利于向Windows应用程序开发过渡.也

C语言控制台窗体图形界面编程(总结)

本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本系列文章我们能够在控制台窗体中制作好看的图形界面,方便了在非TC开发环境中的控制台窗体中进行文本界面和图形界面的设计,有利于向Windows应用程序开发过渡.也能够通过学习这些东西写些好玩的经典游戏比方贪吃蛇,扫雷和俄罗斯方块等. 事实上这些编程技巧并不算是C语言的.事实上,它仅仅只是是通过调用Windows

【C语言】控制台窗口图形界面编程(五):文本移动

目录 00. 目录 01. CHAR_INFO结构 02. ScrollConsoleScreenBuffer函数 03. 程序示例 04. 官方参考程序 00. 目录 01. CHAR_INFO结构 指定Unicode或ANSI字符及其属性.控制台功能使用此结构来读取和写入控制台屏幕缓冲区. 类型声明 typedef struct _CHAR_INFO { union { WCHAR UnicodeChar; CHAR AsciiChar; } Char; WORD Attributes; }

【C语言】控制台窗口图形界面编程(七):鼠标事件

目录 00. 目录 01. INPUT_RECORD结构 02. MOUSE_EVENT_RECORD结构 03. ReadConsoleInput函数 04. 示例程序 00. 目录 01. INPUT_RECORD结构 描述控制台输入缓冲区中的输入事件.可以使用ReadConsoleInput或PeekConsoleInput函数从输入缓冲区读取这些记录,也可以使用WriteConsoleInput函数将这些记录写入输入缓冲区. 类型声明: typedef struct _INPUT_REC

【C语言】控制台窗口图形界面编程(八):键盘事件

目录 00. 目录 01. INPUT_RECORD结构 02. KEY_EVENT_RECORD结构 03. ReadConsoleInput函数 04. 示例程序 00. 目录 01. INPUT_RECORD结构 描述控制台输入缓冲区中的输入事件.可以使用ReadConsoleInput或PeekConsoleInput函数从输入缓冲区读取这些记录,也可以使用WriteConsoleInput函数将这些记录写入输入缓冲区. 类型声明: typedef struct _INPUT_RECOR