我知道如何在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枚举中的任何颜色?
答案 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