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

很简单,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透明
至此,我们已经可以预见到任何一个数输出的形式!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们在C语言控制台输出文本时,除了可以输出文本内容之外,还可以对文本的颜色进行设置,来使输出的文本更加丰富、直观。控制台的颜色设置是通过Windows API函数`SetConsoleTextAttribute()`来实现的。 `SetConsoleTextAttribute()`函数可以设置输出文本的前景色和背景色,前景色指的是文本本身的颜色,而背景色则是文本所在的背景颜色。该函数的原型如下: ```c BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes ); ``` 其中,`hConsoleOutput`参数指定了要设置属性的控制台屏幕缓冲区的句柄,可以通过`GetStdHandle(STD_OUTPUT_HANDLE)`函数获取。`wAttributes`参数指定了输出文本的属性,其中低4位指定前景色,高4位指定背景色。下面是常用的颜色属性值: | 颜色属性值 | 前景色 | 背景色 | | --------- | ------ | ------ | | 0 | 黑色 | 黑色 | | 1 | 蓝色 | 蓝色 | | 2 | 绿色 | 绿色 | | 3 | 浅绿色 | 浅绿色 | | 4 | 红色 | 红色 | | 5 | 紫色 | 紫色 | | 6 | 黄色 | 黄色 | | 7 | 白色 | 白色 | | 8 | 灰色 | 灰色 | | 9 | 淡蓝色 | 淡蓝色 | | 10 | 淡绿色 | 淡绿色 | | 11 | 淡浅绿 | 淡浅绿 | | 12 | 淡红色 | 淡红色 | | 13 | 淡紫色 | 淡紫色 | | 14 | 淡黄色 | 淡黄色 | | 15 | 亮白色 | 亮白色 | 例如,我们可以使用以下代码将控制台的前景色设置为红色、背景色设置为黄色: ```c #include <stdio.h> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); WORD color = FOREGROUND_RED | BACKGROUND_YELLOW | FOREGROUND_INTENSITY; SetConsoleTextAttribute(handle, color); printf("Hello World!"); return 0; } ``` 除了设置前景色和背景色之外,我们还可以使用`GetConsoleScreenBufferInfo()`函数获取当前控制台屏幕缓冲区的属性信息,包括前景色和背景色等,以便恢复默认的控制台颜色。例如: ```c #include <stdio.h> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo(handle, &info); WORD old_color = info.wAttributes; WORD color = FOREGROUND_RED | BACKGROUND_YELLOW | FOREGROUND_INTENSITY; SetConsoleTextAttribute(handle, color); printf("Hello World!"); SetConsoleTextAttribute(handle, old_color); return 0; } ``` 在控制台中,我们也可以通过以下代码来设置控制台字体颜色,以便更改输出文本的颜色: ```c #include <stdio.h> #include <windows.h> int main() { system("color 4f"); printf("Hello World!"); return 0; } ``` 其中,`system("color 4f")`指令中的`4`表示红色,`f`表示白色,可以根据需要更改。需要注意的是,该指令只能在Windows系统上执行,且只能在控制台中执行,不能在IDE等其他环境中执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值