兩種方法
一種方法
獲得控制台輸入輸出句柄
- 函數原型: 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 }
輸出結果: