Aus*_*rst 12 c++ windows winapi
我正在尝试将win32控制台应用程序的字体颜色分别设置为特定的RGB值,如50,75,90.我已经尝试过SetConsoleTextAttribute()
,但不幸的是,对于R,G或B,它似乎被限制为0或255.
这必须是可能的,因为在命令提示符属性窗口中,您可以设置特定颜色,如此
我搜索了很多,但似乎唯一的答案是SetConsoleTextAttribute()
.
Bre*_*McK 15
您需要使用SetConsoleScreenBufferInfoEx来设置它,请参阅CONSOLE_SCREEN_BUFFER_INFOEX结构的ColorTable条目.
控制台颜色是一个两级过程:控制台属性,前景和背景各有四位(红色,绿色,蓝色和强度),这似乎将颜色限制为基本的主要和次要颜色.但是这些值用作颜色表的索引,以确定实际的显示值.因此,将字符属性"颜色"位视为"逻辑红色"等而不是物理红色.(字符属性'red'映射到的值默认情况下实际上是RGB红色,但不一定是.)因此,您总是限制为16种索引颜色; 但是你可以通过ColorTable将它们设置为你想要的16种全RGB颜色.
您在上面的对话框中看到的彩色方块条基本上就是那个颜色表,并按字符属性顺序列出颜色,第一个颜色为"逻辑黑色",依此类推.
小智 5
很抱歉回答晚了一点,但这里是您想要的代码:
CONSOLE_SCREEN_BUFFER_INFOEX info;
info.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfoEx(hConsole, &info);
info.ColorTable[0] = RGB(0,0,0);
...
info.ColorTable[3] = RGB(135, 206, 235);
...
info.ColorTable[15] = RGB (25,25,25);
SetConsoleScreenBufferInfoEx(hConsole, &info);
Run Code Online (Sandbox Code Playgroud)
使用此代码,您可以将所有 16 种索引颜色的颜色值更改为您想要的任何 RGB 颜色。
然后你可以像这样用你想要的颜色打印线:
SetConsoleTextAttribute(hConsole, 3);
std::cout << "Hello World!" << std::endl;
Run Code Online (Sandbox Code Playgroud)
这是我的输出: 我的输出窗口