C++ Win32 控制台颜色
Posted
技术标签:
【中文标题】C++ Win32 控制台颜色【英文标题】:C++ Win32 Console Color 【发布时间】:2013-06-12 02:29:12 【问题描述】:我知道一点如何在 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枚举中的任何颜色?
【问题讨论】:
您是否尝试过设置FOREGROUND_INTENSITY
标志以使其呈鲜红色?例如:SetConsoleTextAttribute( h, FOREGROUND_RED | FOREGROUND_INTENSITY )
可行,但我仍然想知道是否有任何方法可以获得更多颜色,也许是调色板?
Console 仅支持 16 种颜色,由 FOREGROUND_RED、FOREGROUND_BLUE、FOREGROUND_GREEN 和 FOREGROUND_INTENSITY 组合而成。
有16种颜色。从颜色表中检索实际颜色值。可由用户在系统菜单中编辑。您可以在代码中更新它,SetConsoleScreenBufferEx() 函数。
更多颜色即将推出:blogs.msdn.microsoft.com/commandline/2016/09/22/…
【参考方案1】:
这里是 Background 和 ForeGround 颜色的完整列表。 Complete list of WinAPI colors
【讨论】:
【参考方案2】:控制台仅支持 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,
;
【讨论】:
您可以删除所有分配,它仍然可以工作,因为颜色代码是按递增顺序排列的。 值得注意的是,使用SetConsoleScreenBufferInfoEx
可以改变颜色。它们不是一成不变的,改变调色板是完全可能的。【参考方案3】:
控制台只有一组有限的颜色。 .NET 实现使用ConsoleColor
设置颜色,这只是 16 种颜色的枚举。
底层 Win32 控制台有 8 种基色,通过使用强度标志加倍(如 Shaktal 在您的问题下的评论中所述)。
【讨论】:
以上是关于C++ Win32 控制台颜色的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017 c++ win32 控制台项目模板
Visual Studio 2017 c++ win32 控制台项目模板
将 C++ Win32 控制台项目类集成到 Visual Studio 2008 中的 Visual C++(Windows 窗体应用程序)项目中