2

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

4

2 回答 2

4

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

于 2013-06-27T16:17:15.047 回答
4

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;
}
于 2013-06-27T18:15:44.420 回答