两种方法
一种方法
获得控制台输入输出句柄
- 函数原型: HANDLE GetStdHandle(DWORD nStdHandle);
- 参数:
- nStdHandle定义函数返回的是标准输入或标准输出或标准错误的句柄.取值为一下
- STD_INPUT_HANDLE 标准输入
- STD_OUTPUT_HANDLE 标准输出
- STD_ERROR_HANDLE 标准错误
- nStdHandle定义函数返回的是标准输入或标准输出或标准错误的句柄.取值为一下
- 返回值:
- 如果函数成功,这个返回值为设备资源句柄
- 如果函数是吧,返回值是INVALID_HANDLE_VALUE标准,如果想要知道错误信息,调用GetLastError函数去获得
- 头文件: window.h
- 说明: 返回一个标准输入或输出或错误的句柄
设置控制台输入输出文本前景色背景色
- 函数原型: BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput,WORD wAttributes );
- 参数:
- hConsoleOutput 控制台的资源句柄, 该句柄必须具有GENERIC_READ访问权限
- wAttributes设置文本前景色和背景色的具体值,取值如下,可以使一个或 者组合
- FOREGROUND_BLUE 前景色为蓝
- FOREGROUND_GREEN 前景色为绿
- FOREGROUND_RED 前景色为红
- FOREGROUND_INTENSITY 前景色为强光
- BACKGROUND_BLUE 背景色为蓝
- BACKGROUND_GREEN 背景色为绿
- BACKGROUND_RED 背景色为红
- BACKGROUND_INTENSITY 背景色为强光
- 头文件: window.h
- 说明: 用于设置文本前景色和背景色,只对在其后的文本输出或输入
使用步骤
声明一个 HANDLE句柄并获得标准输出句柄用GetStdHandle(STD_OUTPUT_HANDLE)
↓
调用SetConsoleTestAttribute函数设置文本前景色和背景色
例子:
实现一个在 dos 界面上的色彩菜单:

1 #include<iostream> 2 #include<string> 3 #include<conio.h> 4 #include<windows.h> 5 //头文件定义 6 7 8 #define whiteFont FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY //对标志位进行组合设置成白字红底 9 #define whiteFont_redBck BACKGROUND_RED|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|BACKGROUND_INTENSITY|FOREGROUND_INTENSITY //对标志位进行组合设置成红字白底 10 11 using namespace std; 12 13 class ColorTextChoose 14 //实现类 15 { 16 private: 17 string str[4],str_One[4],str_Two[4],str_Three[4],str_Four[4],*str_index[4]; 18 //str 为主菜单 19 //str_One 子菜单项第一行 20 //str_Two 子菜单项第二行 21 //str_Three 子菜单项第三行 22 //str_Four 子菜单项第四行 23 //str_index 用于索引 str_One,str_Two,str_Three,str_Four 24 int index,subIndex; 25 //标记当前选择的子菜单项,subIndex 为 -1 时候没有选中子菜单 26 bool choose; 27 //标记是否选择了子菜单项 28 public: 29 ColorTextChoose() //构造函数初始化数据 30 { 31 str[0] = "text one "; 32 str[1] = "test two "; 33 str[2] = "test three "; 34 str[3] = "test four "; 35 36 str_index[0] = str_One; 37 str_index[1] = str_Two; 38 str_index[2] = str_Three; 39 str_index[3] = str_Four; 40 41 str_One[0] = "One_1 "; 42 43 str_Two[0] = "Two_1 "; 44 str_Two[1] = "Two_2 "; 45 46 str_Three[0] = "Three_1 "; 47 str_Three[1] = "Three_2 "; 48 str_Three[2] = "Three_3 "; 49 50 str_Four[0] = "Four_1 "; 51 str_Four[1] = "Four_2 "; 52 str_Four[2] = "Four_3 "; 53 str_Four[3] = "Four_4 "; 54 55 index = 0; 56 subIndex = -1; 57 choose = false; 58 } 59 bool TextGoing() 60 { 61 this->showText(); 62 while(true) 63 { 64 char buffer = getch(); 65 switch(buffer) 66 { 67 68 case 'w': 69 if(subIndex == 0) 70 { 71 subIndex = -1; 72 choose = false; 73 this->showText(); 74 } 75 else 76 { 77 subIndex --; 78 this->showText(); 79 } 80 break;//按w向上 81 case 's': 82 if(subIndex >= index) 83 { 84 this->showText(); 85 } 86 else 87 { 88 choose = true; 89 subIndex++; 90 this->showText(); 91 } 92 break;//按s向下 93 case 'a': 94 if(index>0) 95 { 96 choose = false; 97 subIndex = -1; 98 index--; 99 this->showText(); 100 } 101 break;//向左 102 case 'd': 103 if(index<3) 104 { 105 choose = false; 106 subIndex = -1; 107 index++; 108 this->showText(); 109 } 110 break;//向右 111 case 'q': 112 ; 113 case 27: 114 return true;//ESC 115 default: 116 cout<<"\b";//退格 117 } 118 } 119 } 120 void showText() 121 { 122 system("color 07");//还原原系统的字体颜色和背景色 123 system("cls"); //清空控制台 124 cout<<"按 a/f 选择菜单 按 w/s 选择子菜单(Esc退出)"<<endl<<endl; 125 for(int i=0;i < 4; i++) 126 { 127 if( i != index || choose) 128 { 129 //没选子项没选中和选择下拉框的情况 130 HANDLE outPutHandle = GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台设备描述表的句柄 131 SetConsoleTextAttribute(outPutHandle,whiteFont);//设置白字黑背景 132 } 133 else 134 { 135 //没选子项的情况选中当前项的情况 136 HANDLE outPutHandle = GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台设备描述表的句柄 137 SetConsoleTextAttribute(outPutHandle,whiteFont_redBck);//设置文本背景设为红色,前景色为白色 138 } 139 cout<<str[i];//输出主字符穿菜单选项 140 }//显示主菜单 141 cout<<endl; 142 for(int i=0;i < index+1; i++) 143 { 144 HANDLE outPutHandle = GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台设备描述表的句柄 145 SetConsoleTextAttribute(outPutHandle,whiteFont);//设置白字黑背景 146 for(int j=index;0<j;j--) 147 cout<<" ";//对齐用 148 if( i != subIndex ) 149 { 150 HANDLE outPutHandle = GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台设备描述表的句柄 151 SetConsoleTextAttribute(outPutHandle,whiteFont);//设置白字黑背景 152 } 153 else 154 { 155 HANDLE outPutHandle = GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台设备描述表的句柄 156 SetConsoleTextAttribute(outPutHandle,whiteFont_redBck);//设置文本背景设为红色,前景色为白色 157 } 158 cout<<(str_index[index])[i]<<endl;//输出子字符穿菜单选项 159 } 160 //显示次菜单 161 HANDLE outPutHandle = GetStdHandle(STD_OUTPUT_HANDLE);//获得控制台设备描述表的句柄 162 SetConsoleTextAttribute(outPutHandle,whiteFont);//设置白字黑背景 163 //还原原来字体颜色 164 } 165 }; 166 167 168 int main() 169 //主函数 170 { 171 ColorTextChoose one; 172 one.TextGoing(); 173 174 system("pause"); 175 return 0; 176 }
输出结果:
另一种方法
设置控制台输入输出前景色背景色
- 函数原型:
- int system( const char *command );
- int _wsystem( const wchar_t *command );
- 参数:
- command为"color xy"color为关键字,x为背景色,y为前景色.x,y可以取值为
- 0=黑色
- 1=蓝色
- 2=绿色
- 3=湖蓝色
- 4=红色
- 5=紫色
- 6=黄色
- 7=白色
- 8=灰色
- 9=淡蓝色
- A=淡绿色
- B=淡浅绿色
- C=淡红色
- D=淡紫色
- E=淡黄色
- F=亮白色
- command为"color xy"color为关键字,x为背景色,y为前景色.x,y可以取值为
- 头文件:cstdlib
例子:
使控制台背景为量白色,文本字体颜色为蓝色:
1 #include<iostream> 2 #include<cstdlib> 3 //头文件定义 4 using namespace std; 5 6 int main() 7 //主函数 8 { 9 system("color F1"); 10 cout<<"change!"<<endl; 11 system("pause"); 12 return 0; 13 }
输出结果: