2012-02-13 270 views
9

有沒有將顏色文本輸出到控制檯的方法? 我正在使用Visual Studio 2010,只需要代碼在Windows中工作。在Windows中使用C++進行顏色控制檯輸出

我一直沒有找到除了WINDOWS COLOR命令之外的任何東西,但它改變了整個屏幕的顏色,我正在尋找一些東西,只會改變我希望輸出的部分。 我已經看到了它在託管C++

例如做,

{color red} 
cout << "Hello "; 
{color blue} 
cout << "world\n"; 

將紅色和藍色產生的 「Hello world」。

+3

可能重複的[更改顏色cout文本c + +](http://stackoverflow.com/questions/8087414/change-color-of-cout-text-c)或[從控制檯C++應用程序Colorize標準輸出到Windows cmd.exe](http:// stackoverflow的.com /問題/ 7778392 /上色-標準輸出輸出到窗口釐米d-exe-from-console-c-app)或[控制檯中的C++顏色](http://stackoverflow.com/questions/4053837/c-colors-in-console-different-colors-in-different-text)或... – 2012-02-13 14:49:09

回答

23

我把這個代碼here

// color your text in Windows console mode 
// colors are 0=black 1=blue 2=green and so on to 15=white 
// colorattribute = foreground + background * 16 
// to get red text on yellow use 4 + 14*16 = 228 
// light red on yellow would be 12 + 14*16 = 236 
// a Dev-C++ tested console application by vegaseat 07nov2004 

#include <iostream> 
#include <windows.h> // WinApi header 

using namespace std; // std::cout, std::cin 

int main() 
{ 
HANDLE hConsole; 
int k; 

hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 

// you can loop k higher to see more color choices 
for(k = 1; k < 255; k++) 
{ 
// pick the colorattribute k you want 
SetConsoleTextAttribute(hConsole, k); 
cout << k << " I want to be nice today!" << endl; 
} 

cin.get(); // wait 
return 0; 
} 
+0

是的,剛剛發現。來到這裏來結束我的問題。雖然謝謝! – Rakosman 2012-02-13 14:44:24

+0

必須稍微等一下才能夠:P – Rakosman 2012-02-13 15:16:37

-3

可以使用系統( 「」)命令,該命令使用這樣的:

cout<<"lol"; 
system("color 1") // the colours are from 1 to 15. 
cout<<"Coloured text! yay"; 
+1

Yay for anything * nix! – alexmherrmann 2012-02-13 14:56:11

+0

這不僅是愚蠢的解決方案,但答案也是錯誤的:** color ** * [fb] *:設置前景* f *和背景* g *顏色。 [from microsoft.com](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true) – 2014-06-18 22:33:19

+1

顏色也是十六進制格式,0 -F。如果你輸入15,你將設置前景色和背景色! – 2016-02-09 20:48:48

2

着色C++在Windows中輸出通過完成SetConsoleTextAttribute,其中控制檯的HANDLE與屬性一起傳入。但是,調用SetConsoleTextAttribute非常麻煩。幸運的是,互聯網和github上有很多小型圖書館可以提供幫助,您應該選擇一個您喜歡的API。如果你想改變顏色與運營商< <,我推薦這個只有標題的庫https://github.com/ikalnitsky/termcolor。該api看起來像這樣:

using namespace termcolor; 
std::cout << grey << "grey message" << reset << std::endl; 
std::cout << red  << "red message"  << reset << std::endl; 

如果必須重置顏色會使您關閉,請嘗試我的庫。它也僅用於頭文件,僅適用於Windows,並且它可以讓您輕鬆着色printf語句:https://github.com/jrebacz/colorwin。該API看起來是這樣的:

using namepsace wincolor; 
std::cout << color(gray) << "grey message\n"; 
std::cout << color(red) << "red message\n"; 

std::cout << "normal color\n"; 
{ 
    withcolor scoped(red); 
    std::cout << "|red\n"; 
    std::cout << "|red again\n"; 
} 
std::cout << "normal color\n"; 
withcolor(cyan).printf("A cyan printf of %d\n", 1234); 
0

這是我們在內部解決方案:

inline void setcolor(int textcol, int backcol) 
{ 
    if ((textcol % 16) == (backcol % 16))textcol++; 
    textcol %= 16; backcol %= 16; 
    unsigned short wAttributes = ((unsigned)backcol << 4) | (unsigned)textcol; 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    SetConsoleTextAttribute(hStdOut, wAttributes); 
} 

,這裏是顏色的例子可供選擇:

#define LOG_COLOR_WHITE 7 
#define COLOR_GREEN 10 
#define COLOR_YELLOW 14 
#define COLOR_MAGENTA 13