gpt4 book ai didi

c++将控制台文本颜色设置为RGB值

转载 作者:行者123 更新时间:2023-11-30 00:53:07 26 4
gpt4 key购买 nike

我想将控制台的文本颜色设置为 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] 中?

最佳答案

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;
}

关于c++将控制台文本颜色设置为RGB值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com