部分文字颜色设置
//需要头#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE consolehwnd;//创建句柄
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN);//设置字体颜色
printf("hello ");
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY | FOREGROUND_BLUE | BACKGROUND_GREEN);//设置字体颜色
printf("world");
getchar();
return 0;
}
效果:
主要就是用了这个函数:
SetConsoleTextAttribute(句柄,颜色属性);
颜色表:
wAttributes是用来设置颜色的参数:
wAttributes | 颜色 | 对应的值 |
FOREGROUND_BLUE | 字体颜色:蓝 | 1 |
FOREGROUND_GREEN | 字体颜色:绿 | 2 |
FOREGROUND_RED | 字体颜色:红 | 4 |
FOREGROUND_INTENSITY | 前景色高亮显示 | 8 |
BACKGROUND_BLUE | 背景颜色:蓝 | 16 |
BACKGROUND_GREEN | 背景颜色:绿 | 32 |
BACKGROUND_RED | 背景颜色:红 | 64 |
BACKGROUND_INTENSITY | 背景色高亮显示 | 128 |
当然那个句柄也很重要:
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄
其参数nStdHandle的值为下面几种类型的一种:
值 | 含义 |
STD_INPUT_HANDLE | 标准输入的句柄 |
STD_OUTPUT_HANDLE | 标准输出的句柄 |
STD_ERROR_HANDLE | 标准错误的句柄 |
还有,这个函数给出的配色方案比较少,详见 https://baike.baidu.com/item/SetConsoleTextAttribute百度百科链接
另外还有来自 https://blog.csdn.net/devvs/article/details/48765911 CSND博客的链接(内容如下),里面进行了混色,并且没有创建句柄变量,直接调用了那个函数。
cout<<"原色(没有设置字体颜色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);//设置三色相加
cout<<"白色(红色绿色蓝色相加)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//设置红色
cout<<"红色(设置的颜色为红色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//设置绿色
cout<<"绿色(设置的颜色为绿色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
//设置蓝色
cout<<"蓝色(设置的颜色为蓝色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);//设置红色和绿色相加
cout<<"黄色(红色和绿色相加色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);//设置红色和蓝色相加
cout<<"粉色(红色和蓝色相加色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"青色(绿色和蓝色相加色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);//设置颜色,没有添加颜色,故为原色
cout<<endl;
通过以上的混色可以诞生一些新的颜色,博主还附了一张图:
看起来效果貌似不错,但我暂时还没有试。
另外就是更简单一点的了,设置整个cmd窗口的颜色属性,直接用system("color 07");这样的语句即可
用法只需要在cmd输入color/?就可以看到
不做更详细的解释了。
2020.8.6 一个示例代码,来源未知
#include <stdio.h>
#include <windows.h>
using namespace std;
//文字前景色
#define FOREGROUND_BLACK 0 //黑色
#define FOREGROUND_BLUE 1 //蓝色
#define FOREGROUND_GREEN 2 //绿色
#define FOREGROUND_CYAN 3 //青色
#define FOREGROUND_RED 4 //红色
#define FOREGROUND_MAGENTA 5 //洋红
#define FOREGROUND_BROWN 6 //棕色
#define FOREGROUND_LIGHTGRAY 7 //淡灰
#define FOREGROUND_DARKGRAIY 8 //深灰
#define FOREGROUND_LIGHTBLUE 9 //淡蓝
#define FOREGROUND_LIGHTGREEN 10 //淡绿
#define FOREGROUND_LIGHTCYAN 11 //淡青
#define FOREGROUND_LIGHTRED 12 //淡红
#define FOREGROUND_LIGHTMAGENTA 13 //淡洋红
#define FOREGROUND_YELLOW 14 //黄色
#define FOREGROUND_WHITE 15 //白色
void color(short x) //自定义函根据参数改变颜色
{
if (x >= 0 && x <= 15)//参数在0-15的范围颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
else//默认的颜色白色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int main()
{
printf("此处为没调用颜色函数之前默认的颜色\n");
//调用自定义color(x)函数 改变的颜色
color(0); printf("黑色0\n");
color(1); printf("蓝色1\n");
color(2); printf("绿色2\n");
color(3); printf("湖蓝色3\n");
color(4); printf("红色4\n");
color(5); printf("紫色5\n");
color(6); printf("黄色6\n");
color(7); printf("白色7\n");
color(8); printf("灰色8\n");
color(9); printf("淡蓝色9\n");
color(10); printf("淡绿色10\n");
color(11); printf("淡浅绿色11\n");
color(12); printf("淡红色12\n");
color(13); printf("淡紫色13\n");
color(14); printf("淡黄色14\n");
color(15); printf("亮白色15\n");
color(16); //因为这里大于15,恢复默认的颜色
printf("回到原来颜色\n");
//直接使用颜色函数
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 13 | 8 | 128 | 32);
printf("红色字体 前景加强 绿色背景 背景加强\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 64);
printf("亮白色字体 前景加强 红色背景 背景加强\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 32);
printf("亮白色字体 前景加强 红色背景 背景加强\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 64);
printf("亮白色字体 前景加强 红色背景 背景加强\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | 8 | 16 | 32 | 64);
printf("亮白色字体 前景加强 红色背景 背景加强\n");
//声明句柄再调用函数
HANDLE JB = GetStdHandle(STD_OUTPUT_HANDLE);//创建并实例化句柄
SetConsoleTextAttribute(JB, 2 | 8);
printf("颜色及对应数字表:\n");
for (int i = 0; i < 10; i++){
//color(16);printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i);
printf("%-3d", i);
color(16); printf(" ");
if (i % 16 == 0) printf("\n");
}
color(16);
system("pause");
return 0;
//类似的函数还有system("color XX");(X是十六进制0~F之间的数,不过这种函数改变的是整个画面,而不能让多处局部变色;
}