1 /*
2 颜色函数SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),前景色 | 背景色 | 前景加强 | 背景加强);
3 前景色:数字0-15 或 FOREGROUND_XXX 表示 (其中XXX可用BLUE、RED、GREEN表示)
4 前景加强:数字8 或 FOREGROUND_INTENSITY 表示
5 背景色:数字16 32 64 或 BACKGROUND_XXX蓝,绿,红三种颜色表示
6 背景加强: 数字128 或 BACKGROUND_INTENSITY 表示
7 主要应用:改变指定区域字体与背景的颜色
8 前景颜色对应值:
9 0=黑色 8=灰色
10 1=蓝色 9=淡蓝色 十六进制
11 2=绿色 10=淡绿色 0xa
12 3=湖蓝色 11=淡浅绿色 0xb
13 4=红色 12=淡红色 0xc
14 5=紫色 13=淡紫色 0xd
15 6=黄色 14=淡黄色 0xe
16 7=白色 15=亮白色 0xf
17 也可以把这些值设置成常量。
18 */
19 #include <stdio.h>
20 #include <windows.h>
21 using namespace std;
22 void color(short x) //自定义函根据参数改变颜色
23 {
24 if(x>=0 && x<=15)//参数在0-15的范围颜色
25 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
26 else//默认的颜色白色
27 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
28 }
29 int main()
30 {
31 printf("此处为没调用颜色函数之前默认的颜色\n");
32 //调用自定义color(x)函数 改变的颜色
33 color(0); printf("黑色0\n");
34 color(1); printf("蓝色1\n");
35 color(2); printf("绿色2\n");
36 color(3); printf("湖蓝色3\n");
37 color(4); printf("红色4\n");
38 color(5); printf("紫色5\n");
39 color(6); printf("黄色6\n");
40 color(7); printf("白色7\n");
41 color(8); printf("灰色8\n");
42 color(9); printf("淡蓝色9\n");
43 color(10); printf("淡绿色10\n");
44 color(11); printf("淡浅绿色11\n");
45 color(12); printf("淡红色12\n");
46 color(13); printf("淡紫色13\n");
47 color(14); printf("淡黄色14\n");
48 color(15); printf("亮白色15\n");
49 color(16); //因为这里大于15,恢复默认的颜色
50 printf("回到原来颜色\n");
51 //直接使用颜色函数
52 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),13 | 8 | 128| 32);
53 printf("红色字体 前景加强 绿色背景 背景加强\n");
54 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15 | 8 | 128 | 64);
55 printf("亮白色字体 前景加强 红色背景 背景加强\n");
56 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15 | 8 | 128 | 32);
57 printf("亮白色字体 前景加强 红色背景 背景加强\n");
58 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15 | 8 | 128 | 64);
59 printf("亮白色字体 前景加强 红色背景 背景加强\n");
60
61 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | 8 | 16 | 32 | 64);
62 printf("亮白色字体 前景加强 红色背景 背景加强\n");
63 //声明句柄再调用函数
64 HANDLE JB = GetStdHandle(STD_OUTPUT_HANDLE);//创建并实例化句柄
65 SetConsoleTextAttribute(JB, 2 | 8);
66 printf("颜色及对应数字表:\n");
67 for(int i = 0;i < 10;i ++){
68 //color(16);printf(" ");
69 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i);
70 printf("%-3d", i);
71 color(16);printf(" ");
72 if(i % 16 == 0) printf("\n");
73 }
74 color(16);
75 system("pause");
76 return 0;
77 //类似的函数还有system("color XX");(X是十六进制0~F之间的数,不过这种函数改变的是整个画面,而不能让多处局部变色;
78 }
79