我想将控制台的文本颜色设置为RGB颜色。 我创建了一个函数来获取控制台的ColorTable并更改其中的颜色,但它不起作用。我不知道如何将文本颜色设置为颜色表中的值,所以我只是更改整个颜色表,但它没有做任何事情。
void setColor(int r, int g, int b)
{
COLORREF cr;
cr = RGB(r, g, b);
PCONSOLE_SCREEN_BUFFER_INFOEX ci;
CONSOLE_SCREEN_BUFFER_INFOEX cir;
ci = ○
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfoEx(hConsole , ci);
cout <<hex<< ci->ColorTable[2];
for(int i=0;i<16;i++){
ci->ColorTable[i] = cr;
}
SetConsoleScreenBufferInfoEx(hConsole, ci);
GetConsoleScreenBufferInfoEx(hConsole , ci);
cout <<endl << ci->ColorTable[2];
}
在main()
中我多次调用该函数,但每次调用的输出都相同,颜色不会改变。 SetConsoleScreenBufferInfoEx()
和GetConsoleScreenBufferInfoEx()
似乎没有做任何事情,ci
在被调用时保持不变。
我做错了什么?
此外,如果它有效,我认为背景颜色也会因为我改变整个调色板而改变,所以如何将颜色表中的文本颜色设置为特定值,例如我将ci->ColorTable[2] = cr;
放在changeColor()
函数而不是for循环中,如何将文本颜色设置为现在存储在ColorTable[2]
中的颜色?
答案 0 :(得分:3)
您需要使用SetConsoleTextAttribute
设置当前文字颜色和背景颜色,有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs.85).aspx。
答案 1 :(得分:3)
Windows控制台颜色表如下所示:
Color Background Foreground
---------------------------------------------
Black 0 0
Blue 1 1
Green 2 2
Cyan 3 3
Red 4 4
Magenta 5 5
Brown 6 6
White 7 7
Gray - 8
Intense Blue - 9
Intense Green - 10
Intense Cyan - 11
Intense Red - 12
Intense Magenta - 13
Yellow - 14
Intense White - 15
要设置背景颜色,必须将前景色代码与之组合 使用以下等式的背景颜色代码:
finalcolor = (16*backgroundcolor) + foregroundcolor
如果要设置具有蓝色背景和白色文本的文本颜色 你只需在表格中查找颜色代码即可。蓝色是1,白色是15;
因此int backgroundcolor=1;
和int foregroundcolor=15;
#include <windows.h>
#include <iostream>
using namespace std;
void setcolor(int color)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
return;
}
int main()
{
int foregroundcolor=15;
int backgroundcolor=1;
int finalcolor;
finalcolor=(16*backgroundcolor)+foregroundcolor;
setcolor(finalcolor);
cout<<"finalcolor=(16*backgroundcolor)+foregroundcolor\n";
setcolor(7);
return 0;
}