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

use*_*929 3 c++ winapi console-application

我想将控制台的文本颜色设置为 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];
}
Run Code Online (Sandbox Code Playgroud)

main()多次调用该函数,但每次调用的输出都是相同的,并且颜色不会改变。SetConsoleScreenBufferInfoEx()并且GetConsoleScreenBufferInfoEx()似乎没有做任何事情,ci当它们被调用时保持不变。

我做错了什么?

另外,如果它有效,我假设背景颜色也会改变,因为我改变了整个调色板,那么如何将文本颜色设置为颜色表中的特定值,例如我放入ci->ColorTable[2] = cr;函数changeColor()而不是 for 循环,如何将文本颜色设置为现在存储的颜色ColorTable[2]

Mge*_*etz 5

您需要使用SetConsoleTextAttribute设置当前文本颜色和背景颜色,详细信息请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs.85).aspx 。