【问题标题】:Windows c change console color valuesWindows c 更改控制台颜色值
【发布时间】:2018-01-03 04:18:21
【问题描述】:

目前,我这样做是为了更改控制台颜色:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN);

但是,如果我想将背景颜色设置为,例如,#64e0fc,该怎么办?我知道控制台可以呈现不同的颜色(您可以在属性中设置它们),但是我可以控制显示的颜色吗?

【问题讨论】:

  • 控制台 API 使用 16 色调色板,在每个屏幕缓冲区中定义。您可以在控制台注册表设置(ColorTable00 -- ColorTable15)中修改调色板的默认设置和按标题设置;或在从快捷方式启动的应用程序的快捷方式设置中;或通过SetConsoleScreenBufferInfoEx 在代码中。 API FOREGROUND_* 常量是强度 (8)、红色 (4)、绿色 (2) 和蓝色 (1) — 16 色调色板的 4 位。 BACKGROUND_* 常量左移 4 位,并使用相同的调色板。高字节COMMON_LVB_* 常量用于 DBCS、反转和下划线。
  • @eryksun 我希望我可以将其标记为答案;非常翔实!谢谢!
  • 您必须支持旧版本的 Windows,还是可以使用 Windows 10 控制台中的新功能?
  • @eryksun 我希望支持旧版本,但也对您的想法感兴趣

标签: c windows


【解决方案1】:

Windows 控制台使用 4 位调色板,因此前景和背景最多可以有 16 种颜色。确切的值在注册表中定义并且可以修改。

HKEY_CURRENT_USER\Console\ColorTable##
HKEY_CURRENT_USER\Console\(program)\ColorTable##

其中## 是从 00 到 15 的两位数。

程序可以通过调用SetConsoleScreenBufferInfoEx() 来设置调色板,但一次不能处理超过16 种颜色。

注意DWORD COLORREF的格式:

指定显式 RGB 颜色时,COLORREF 值具有以下十六进制形式:

0x00BBGGRR

【讨论】:

  • "HKCU\Console" 具有默认控制台设置。这些被窗口标题设置覆盖。窗口标题在应用程序STARTUPINFO 中设置(例如,CMD 的start 命令允许您设置标题)。它默认为应用程序路径。当应用程序分配新控制台而不是继承其控制台时,控制台会从“HKCU\Console\[窗口标题]”加载每个标题设置。但是,如果应用程序通过 .LNK 快捷方式运行,则不使用窗口标题设置。相反,快捷方式中的设置用于覆盖默认值。
  • @eryksun 是的,我知道。
  • 在 Windows 10 中,您可以使用具有 24 位 RGB 颜色代码的虚拟终端序列——即"\x1b[38;2;<r>;<g>;<b>m"(前景)和"\x1b[48;2;<r>;<g>;<b>m"(背景)。但他们已经将其与 16 色调色板数据分离,这些数据可以通过控制台 API 函数(如ReadConsoleOutputAttribute)进行设置和读取。在这种情况下,读取字符属性取决于实际颜色是什么,我认为没有任何方法可以使用控制台函数获取实际值。
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2011-08-22
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
相关资源
最近更新 更多