2009-05-22 21 views
7

色付きのテキストをコンソールに出力できるコンソールクラスを作成したいと思います。色付きテキストをC++でコンソールに出力

だから私は(printfのための基本的ラッパー)のような何かを行うことができます:

Console::Print("This is a non-coloured message\n"); 
Console::Warning("This is a YELLOW warning message\n"); 
Console::Error("This is a RED error message\n"); 

がどのように私はWindowsコンソールに異なる色のテキストを印刷しますか?

答えて

9

チェックアウトthis guideがあります。

std::cout << "standard text" << setcolour(red) << "red text" << std::endl; 

Hereの独自のマニピュレータを実装する方法の小さなガイド:私のような何かを行うことができますので、私は、カスタムマニピュレータになるだろう。

迅速なコード例:

#include <iostream> 
#include <windows.h> 
#include <iomanip> 

using namespace std; 

enum colour { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE }; 

struct setcolour 
{ 
    colour _c; 
    HANDLE _console_handle; 


     setcolour(colour c, HANDLE console_handle) 
      : _c(c), _console_handle(0) 
     { 
      _console_handle = console_handle; 
     } 
}; 

// We could use a template here, making it more generic. Wide streams won't 
// work with this version. 
basic_ostream<char> &operator<<(basic_ostream<char> &s, const setcolour &ref) 
{ 
    SetConsoleTextAttribute(ref._console_handle, ref._c); 
    return s; 
} 

int main(int argc, char *argv[]) 
{ 
    HANDLE chandle = GetStdHandle(STD_OUTPUT_HANDLE); 
    cout << "standard text" << setcolour(RED, chandle) << " red text" << endl; 

    cin.get(); 
} 
+0

このコードは実際には機能しません。私はそれを持っています。 –

+0

@Brock Woolf:はい、申し訳ありません。私はHANDLEのコピーに問題がありました。 – Skurmedel

+0

これは完璧に機能する素晴らしいものです。ありがとうございました! :D –

1

私は「C++ console write colored text」の検索を行い、約4または5でthis pageを思いついた。サイトにはコピー&のペーストセクションがあるので、ここに投稿すると思った。また、)これを促さ:C#の場合

#include <stdlib.h> 
#include <windows.h> 
#include <iostream> 

using namespace std; 

enum Color { DBLUE=1,GREEN,GREY,DRED,DPURP,BROWN,LGREY,DGREY,BLUE,LIMEG,TEAL, 
    RED,PURPLE,YELLOW,WHITE,B_B }; 
/* These are the first 16 colors anyways. You test the other hundreds yourself. 
    After 15 they are all combos of different color text/backgrounds. */ 

bool quit; 

void col(unsigned short color) 
{ 
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hcon,color); 
} 

istream &operator>> (istream &in, Color &c) 
{ 
    int tint; 
    cin >> tint; 
    if (tint==-1) quit=true; 
    c=(Color)tint; 
} 

int main() 
{ 
    do { 
     col(7); // Defaults color for each round. 
     cout << "Enter a color code, or -1 to quit... "; 
     Color y; 
     cin >> y; // Notice that >> is defined above for Color types. 
     col(y); // Sets output color to y. 
     if (!quit) cout << "Color: " << (int)y << endl; 
    } while (!quit); 
    return 0; 
} 

this page

+0

。 –

+0

この場合、検索用語は "c#console.write colored text"でした。 – ChrisF

0

Look hereそれに属性を適用する方法、Windowsのコンソールとhereに書き込みする方法を見つけるために。
あなたはどのOSで作業していますか?

0
#include <windows.h> 
#include <iostream.h> 
using namespace std; 

int main() 
{ 
    HANDLE hOut; 

    hOut = GetStdHandle(STD_OUTPUT_HANDLE); 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED); 
    cout << "Red  " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_INTENSITY); 
    cout << "Red  " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN); 
    cout << "Green " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN | 
          BACKGROUND_INTENSITY); 
    cout << "Green " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE); 
    cout << "Blue " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE | 
          BACKGROUND_INTENSITY); 
    cout << "Blue " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN); 
    cout << "Yellow " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN | 
          BACKGROUND_INTENSITY); 
    cout << "Yellow " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE); 
    cout << "Cyan " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE | 
          BACKGROUND_INTENSITY); 
    cout << "Cyan " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE | 
          BACKGROUND_RED); 
    cout << "Magenta " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_BLUE | 
          BACKGROUND_RED | 
          BACKGROUND_INTENSITY); 
    cout << "Magenta " << endl; 

    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE); 
    cout << "White " << flush; 
    SetConsoleTextAttribute(hOut, 
          BACKGROUND_RED | 
          BACKGROUND_GREEN | 
          BACKGROUND_BLUE | 
          BACKGROUND_INTENSITY); 
    cout << "White " << endl; 

    return 0; 
} 
+0

希望作品 – madhudskumar

0

使用あなたが持っていた最初のリンクは、それがC#がいたにもかかわらず、有益だったこと、これらの機能

enum c_color{BLACK=30,RED=31,GREEN=32,YELLOW=33,BLUE=34,MAGENTA=35,CYAN=36,WHITE=37}; 
enum c_decoration{NORMAL=0,BOLD=1,FAINT=2,ITALIC=3,UNDERLINE=4,RIVERCED=26,FRAMED=51}; 
void pr(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){ 
    cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"; 
} 

void prl(const string str,c_color color,c_decoration decoration=c_decoration::NORMAL){ 
    cout<<"\033["<<decoration<<";"<<color<<"m"<<str<<"\033[0m"<<endl; 
} 
関連する問題