C ++ Win32控制台颜色

时间:2013-06-15 15:57:37

标签: c++ winapi colors console

我知道如何在Win32 C ++控制台中做颜色。但它效率不高。例如:

 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枚举中的任何颜色?

3 个答案:

答案 0 :(得分:26)

控制台仅支持16种颜色,这些颜色是通过将以下四个值组合而创建的(我可能会将灰色/黑暗混淆,但你明白了):

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,
  };
}

答案 1 :(得分:2)

控制台只有一组有限的颜色。 .NET实现使用ConsoleColor来设置颜色,这只是16种颜色的枚举。

底层的Win32控制台有8种基色,通过使用强度标记加倍(如Shaktal在你的问题评论中所述)。

答案 2 :(得分:1)

以下是背景 ForeGround 颜色的完整列表。 Complete list of WinAPI colors