C/C++知识点之C语言控制台窗口图形界面编程(三)
小标 2018-12-03 来源 : 阅读 1655 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言控制台窗口图形界面编程(三),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言控制台窗口图形界面编程(三),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

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


[cpp] view plaincopy




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

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


[cpp] view plaincopy




#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不支持上述的定义常量的方式。需要从这个示例中了解的是三原色的混合是用C语言位运算中的按位或 | 运算符,背景颜色与字符颜色的同时定义也是使用这个运算符融合。另外,将任意颜色与对应的加强色(灰色,有前景和背景两种,需要对应)融合后会成为对应颜色的高亮版,比如红色字符与前景加强色的融合会结合成亮红色。
 
       至于反色,大家可以试试,当我设置了文本属性为反色后,输入字符都不显示了,但是下标还在移动,我估计反色将白色字符变成了黑色字符,与黑色背景一样,所以没有显示出来。至于反色与其他的组合以及其他的颜色组合,还需要大家一起探索

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved