2013-06-15 15 views
10

私はWin32 C++コンソールで色を行う方法を少し知っています。しかし、それは本当に効率的ではありません。例:C++ Win32コンソールの色

SYSTEM("color 01") 

処理が大幅に減速します。また:

HANDLE h = GetStdHandle (STD_OUTPUT_HANDLE); 
WORD wOldColorAttrs; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 

/* 
    * First save the current color information 
    */ 

GetConsoleScreenBufferInfo(h, &csbiInfo); 
wOldColorAttrs = csbiInfo.wAttributes; 

/* 
    * Set the new color information 
    */ 

SetConsoleTextAttribute (h, FOREGROUND_RED); 

素晴らしいですが、色はあまりありません。また、FOREGROUND_REDは暗赤色です。

CLRプロパティConsole::ForegroundColorのような方法がないので、ConsoleColor列挙型の任意の色を使用できますか?

+2

あなたが設定したことがあります'FOREGROUND_INTENITY'フラグを使って明るい赤色にしますか?例: 'SetConsoleTextAttribute(h、FOREGROUND_RED | FOREGROUND_INTENITY)' –

+0

これはうまくいきますが、多分パレットを使って色を増やす方法があるのだろうか? –

+0

コンソールは、FOREGROUND_RED、FOREGROUND_BLUE、FOREGROUND_GREENおよびFOREGROUND_INTENSITYを組み合わせて作成される16色のみをサポートしています。 – riv

答えて

20

コンソールのみ、以下のように4つの値を組み合わせることによって作成された16色を、サポートしている(私はグレーを持っているかもしれない/混乱しdarkgrayが、あなたのアイデアを得る):

namespace ConsoleForeground 
{ 
    enum { 
    BLACK    = 0, 
    DARKBLUE   = FOREGROUND_BLUE, 
    DARKGREEN   = FOREGROUND_GREEN, 
    DARKCYAN   = FOREGROUND_GREEN | FOREGROUND_BLUE, 
    DARKRED   = FOREGROUND_RED, 
    DARKMAGENTA  = FOREGROUND_RED | FOREGROUND_BLUE, 
    DARKYELLOW  = FOREGROUND_RED | FOREGROUND_GREEN, 
    DARKGRAY   = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    GRAY    = FOREGROUND_INTENSITY, 
    BLUE    = FOREGROUND_INTENSITY | FOREGROUND_BLUE, 
    GREEN    = FOREGROUND_INTENSITY | FOREGROUND_GREEN, 
    CYAN    = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    RED    = FOREGROUND_INTENSITY | FOREGROUND_RED, 
    MAGENTA   = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE, 
    YELLOW   = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN, 
    WHITE    = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    }; 
} 
+0

ありがとう、それはすべての答えのおかげで非常に便利です。 –

+0

すべての割り当てを削除することはできますが、カラーコードが昇順になっているため、割り当てはまだ機能します。 – fereh

2

コンソールの色は限られています。 .NET実装では、ConsoleColorを使用して色を設定しています。これは16色の列挙です。

基礎となるWin32コンソールには、強度フラグを使用することで2倍になる8つの基本色があります(質問のShaktalのコメントに記載されています)。

関連する問題