控制台部分文字颜色调整
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】Win32
[
6 瀏覽
0 評論
0 贊
0 踩
]
概要
设置控制台文字前景色,背景色,也可以设置整个控制台的颜色
正文
部分文字颜色设置
//需要头#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之间的数,不过这种函数改变的是整个画面,而不能让多处局部变色; }