我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

当我们在命令行输出字符的时候,会想着,要是能控制输出字符的颜色就好了。
现在,满足你,有这么一个函数能够帮助我们实现这个想法。
↓↓↓↓↓
SetConsoleTextAttribute();

依照惯例我们来看看这个函数的构成。


SetConsoleTextAttribute(
 _In_ HANDLE hConsoleOutput,
 _In_ WORD wAttributes
 );

HANDLE在上一篇博客中我们见过。注意在使用前,要先将其变为标准输出句柄。


typedef void *HANDLE;//HANDLE是vodi*的重定义
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出句柄

现在我们主要来看一下WORD的定义。
typedef unsigned short WORD;

从上可以的除WORD其实是个无符号的整型,一般这样的话,线索就好像是断了,只看数值的话只能知道取值范围是0-65535。
但是我们去网上搜索这个函数后,我们就发现了简单的用法,这里我来举个例子:


#include <stdio.h>
#include <windows.h>

int main() {
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出句柄
	SetConsoleTextAttribute(hOut, FOREGROUND_INTENSITY | FOREGROUND_BLUE);//字体设置为蓝色
	printf("R\n");
}

我们看到不仅我们输出的字符"R"变成了蓝色,且后面的自动弹出的提示也变成了蓝色。
我们可以把输出字符的命令当作是一支画笔,而我们通过SetConsoleTextAttribute();改变了画笔的颜色。//这里提醒一下,直到下次更改前颜色会一直保持
而且我们可以看到,本来应该是填入WORD类型数据的地方,现在变成了"FOREGROUND_INTENSITY | FOREGROUND_BLUE"。
这是什么东西呢,我们对它查看定义来看一下:


#define FOREGROUND_BLUE  0x0001 // text color contains blue.
#define FOREGROUND_GREEN  0x0002 // text color contains green.
#define FOREGROUND_RED  0x0004 // text color contains red.
#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
#define BACKGROUND_BLUE  0x0010 // background color contains blue.
#define BACKGROUND_GREEN  0x0020 // background color contains green.
#define BACKGROUND_RED  0x0040 // background color contains red.
#define BACKGROUND_INTENSITY 0x0080 // background color is intensified.

从看到上的的注释不难看出,这些函数是对一些十六位进制的值的宏定义。//0x代表这后面的数字是十六位进制
而且根据宏定义名可简单的归类:
前四个是对字体的 蓝色,绿色,红色,亮度 进行设置
后四个是对背景的 蓝色,绿色,红色,亮度 进行设置

相信机智的你已经看出来了,SetConsoleTextAttribute(HANDLE,WORD);其实是通过判断WORD的二进制,其相对应位置上的值来开启颜色属性的。
(short是二字节,但是这里方便书写就写一字节了)

对应属性 蓝色字体 绿色字体 红色字体 高亮字体 蓝色背景 绿色背景 红色背景 高亮背景
十进制 0x0001 0x0002 0x0004 0x0008 0x0010 0x0020 0x0040 0x0080
二进制 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

上诉例子里的值也可以这么转换下来:
" FOREGROUND_INTENSITY|FOREGROUND_BLUE "--->" 0x0008|0x0001 "--->" 00001000|00000001 "
--->"00001001"
然后根据"00001001"查看,哦,开启第一位和第四位的属性,那么也就是打开启 蓝色字体和高亮字体的属性。
还有就是 这里的红绿蓝其实就是三原色,经过通过 红绿 红蓝 绿蓝 还可得到 黄色 青色 粉色 这三种颜色。


//宏定义字体颜色
#define FOREGROUND_WHITE  0x0007 //白色(红+绿+蓝) 默认颜色
#define FOREGROUND_YELLOW  0x0006 //黄色(红+绿)
#define FOREGROUND_PINK  0x0005 //粉色(红+蓝)
#define FOREGROUND_INDIGO  0x0003 //青色(绿+蓝)

这里我把混合的颜色写上来,为了方便使用,可以在自己的代码里添加这个宏定义方便使用

到此这篇关于C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色的文章就介绍到这了,更多相关C/C++控制输出字符的颜色内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用C#中的Console.ForegroundColor函数设置控制台输出的前景色

控制台输出是程序中常用的一种调试与信息展示手段。C#语言中的Console类提供了一系列方法来控制控制台输出的样式和颜色。其中,Console.ForegroundColor函数用于设置控制台输出的前景色(即文本的颜色)。要使用Consol
使用C#中的Console.ForegroundColor函数设置控制台输出的前景色
2023-11-18

使用C#中的Console.Clear函数清空控制台输出

使用C#中的Console.Clear函数清空控制台输出在C#的控制台应用程序中,我们经常需要清空控制台中的输出信息,以便于显示新的内容或者提供更好的用户体验。C#中提供了Console.Clear函数来实现这个功能,它能够清除控制台中的输
使用C#中的Console.Clear函数清空控制台输出
2023-11-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录