我试图设置一个win32控制台应用程序的字体颜色分别为50,75,90等特定的RGB值。我已经尝试过SetConsoleTextAttribute()
,但不幸的是,它似乎被限制为0或255的R,G或B.RGB特定控制台文本颜色C++
这是必须的,因为在命令提示属性窗口中可以设置特定的颜色,像这样
我已经搜查了不少,但似乎唯一的答案是SetConsoleTextAttribute()
。
我试图设置一个win32控制台应用程序的字体颜色分别为50,75,90等特定的RGB值。我已经尝试过SetConsoleTextAttribute()
,但不幸的是,它似乎被限制为0或255的R,G或B.RGB特定控制台文本颜色C++
这是必须的,因为在命令提示属性窗口中可以设置特定的颜色,像这样
我已经搜查了不少,但似乎唯一的答案是SetConsoleTextAttribute()
。
您需要使用SetConsoleScreenBufferInfoEx来设置它,请参阅CONSOLE_SCREEN_BUFFER_INFOEX结构的ColorTable条目。
控制台颜色是一个两级过程:有控制台属性,前景和背景各有四个位(红色,绿色,蓝色和强度),这似乎将颜色限制为基本主色和次色。但是这些值被用作颜色表的索引,以确定实际的显示值。所以将字符属性'color'认为是“逻辑红色”而不是物理红色。 (字符属性'红'映射到的值实际上是默认的红色,但不一定是。)所以你总是限制在16种索引颜色;但是你可以通过ColorTable将它们设置为你想要的16种全RGB颜色。
您在上面对话框中看到的彩色方块条基本上就是该颜色表,并且按照其字符属性顺序列出了颜色,第一个suqare是“逻辑黑色”,依此类推。
哇,很好的解释。感谢你!你摇滚。 – 2012-03-01 02:56:13
有一种方法可以使文本完全RGB,但如果您制作文本的副本,然后更改RGB值,则需要'SetPixel
',这是我为A制作的内容,它是很难做,但我正在制作一个.h文件,所以每个人都可以使用它,在这里你去:
void PrintA(int R, int G, int B)
{
HWND myconsole = GetConsoleWindow();
HDC mydc = GetDC(myconsole);
SetPixel(mydc, i + 0, i2 + 3, RGB(R, G, B));
SetPixel(mydc, i + 0, i2 + 4, RGB(R, G, B));
SetPixel(mydc, i + 0, i2 + 5, RGB(R, G, B));
SetPixel(mydc, i + 0, i2 + 6, RGB(R, G, B));
SetPixel(mydc, i + 0, i2 + 7, RGB(R, G, B));
SetPixel(mydc, i + 0, i2 + 8, RGB(R, G, B));
SetPixel(mydc, i + 0, i2 + 9, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 2, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 3, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 4, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 5, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 6, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 7, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 8, RGB(R, G, B));
SetPixel(mydc, i + 1, i2 + 9, RGB(R, G, B));
SetPixel(mydc, i + 2, i2 + 1, RGB(R, G, B));
SetPixel(mydc, i + 2, i2 + 2, RGB(R, G, B));
SetPixel(mydc, i + 2, i2 + 6, RGB(R, G, B));
SetPixel(mydc, i + 3, i2 + 1, RGB(R, G, B));
SetPixel(mydc, i + 3, i2 + 2, RGB(R, G, B));
SetPixel(mydc, i + 3, i2 + 6, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 2, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 3, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 4, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 5, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 6, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 7, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 8, RGB(R, G, B));
SetPixel(mydc, i + 4, i2 + 9, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 3, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 4, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 5, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 6, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 7, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 8, RGB(R, G, B));
SetPixel(mydc, i + 5, i2 + 9, RGB(R, G, B));
i += 8;
if (i/80 == 8)
{
i = 0;
i2 += 12;
}
}
红色,绿色和蓝色的颜色实际上是在0到255范围内。任何颜色都是3个8位的组合。另请参阅 - http://service.real.com/help/library/guides/realone/ProductionGuide/HTML/htmfiles/colors.htm – 2012-03-01 01:28:42
你甚至读过我的问题吗? – 2012-03-01 01:30:26
当然。目前还不清楚你的问题到底是什么。你有位掩码,你有一个功能 - 调用它,让你的控制台充满色彩。 – 2012-03-01 01:37:26