利用SetConsoleTextAttribute函数改变控制台输出字体颜色

本文详细解析了SetConsoleTextAttribute函数的使用方法及各参数含义,通过实验展示了颜色控制原理,并提供了完整代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很简单,MSDN上写得也很清楚

我仔细说明一下SetConsoleTextAttribute的第二个参数
它是一个WORD型的变量,其实就是一个unsigned shot型
范围为0~65535
当值超过它时自己会出警告
warning C4305: 'argument' : truncation from 'const int' to 'unsigned short'
编辑器将进行隐式类型转换,只取低十六位
具体我就不说了
具体说一下各种数不同颜色问题。
首先我们来写一段程序
printf("%d\n",FOREGROUND_BLUE);
printf("%d\n",FOREGROUND_GREEN);
printf("%d\n",FOREGROUND_RED);
printf("%d\n",FOREGROUND_INTENSITY);
printf("%d\n",BACKGROUND_BLUE);
printf("%d\n",BACKGROUND_GREEN);
printf("%d\n",BACKGROUND_RED);
printf("%d\n",BACKGROUND_INTENSITY);
通过输出,我们可以清楚地看到每个值对应的十进值数是多少
分别为1 2 4 8 16 32 64 128
即这个函数是靠一个字节的低四来控制前景色,高四位来控制背景色
低八位分别对应:
前景蓝,绿,红,高亮,背景蓝,绿,红,高亮。
我们可以通过或运算符来将这些属性叠加,即1到255都是我们控制之内的颜色。
到这里应该明白吧?
如果明白了我上面所说的,你可以接着往下看。
新的问题又出现了
我们知道低八位的每一个数都代表什么了,但高八位又都有什么意义呢?
即266到65535这些数又会显示出什么呢?
MSDN上是不会写这些的
怎么办?答案是靠我们自己。
我是这样来实验的
写以下程序:


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

int main(int argc, char* argv[])
{
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
int i=0;
SetConsoleTextAttribute(consolehwnd,i);
printf("i am dadalili!\n");
for(i=1;i<65536;i*=2)
{
SetConsoleTextAttribute(consolehwnd,i);
printf("i am dadalili!\n");
}
SetConsoleTextAttribute(consolehwnd,255);//因为最后一行被设为透明,为了使大家能够//看得更清楚,我将Press any key to continue设为一行白
return 0;
}
这样就可以清楚地看出每个位代表输出的格式
下面将十六位对应的输出总结如下:
0透明1前景蓝2前景绿3前景红4前景高亮5背景蓝6背景绿7背景红8背景高亮
9透明10透明11上划线12左划线13右划线14右划线15透明16透明
至此,我们已经可以预见到任何一个数输出的形式!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值