大佬教程收集整理的这篇文章主要介绍了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");
}
#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++ 中如何使用SetConsoleTextAttribute()函数来控制输出字符的颜色所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。