windows - RGB-specifikke konsoltekstfarve C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at indstille en win32-konsolprogrammets skrifttypefarve til en specifik RGB-værdi som henholdsvis 50, 75, 90. Jeg har allerede forsøgt SetConsoleTextAttribute(), men det synes desværre at være begrænset til 0 eller 255 for R, G eller B.


Dette skal være muligt, fordi i vinduet med kommandoprompt egenskaber kan du indstille den specifikke farve, som sådan


http://www.yourgamercard.net/screen/i/4a8c57.png


Jeg har søgt ret lidt, men det ser ud til, at det eneste svar er SetConsoleTextAttribute().

Bedste reference


Du skal bruge SetConsoleScreenBufferInfoEx for at indstille dette, Se ColorTable-indgangen i CONSOLE\_SCREEN\_BUFFER\_INFOEX struct.


Konsolfarver er en proces på to niveauer: Der er konsolattributten, der har fire bits hver for forgrunds og baggrunds (rød, grøn, blå og intensitet), som synes at begrænse farverne til de grundlæggende primære og sekundære farver. Disse værdier bruges som indekser til farvetabellen for at bestemme den aktuelle visningsværdi. Så tænk på tegnattributten 'farve' -biter som 'logisk rød' osv. snarere end fysisk rød. (Den værdi, som tegnet attribut 'rød' kortlægger til er faktisk RGB rød som standard, men det skal ikke være.) Så du er altid begrænset til 16 indekserede farver, men du kan indstille dem til uanset 16 full-RGB farver du vil have via ColorTable.


Striben af ​​farvede firkanter, som du ser i dialogboksen ovenfor, er hovedsagelig det farveskema og lister farverne i deres karakterattest, den første suqare er 'logisk sort' og så videre.

Andre referencer 1


Der er en måde at gøre det på, så teksten er helt RGB, men det kræver 'SetPixel' Hvis du laver en kopi af teksten, kan du derefter ændre RGB værdierne, her er noget jeg lavede til A, det er svært at gøre, men jeg gør en .h-fil, så alle kan bruge den, her går du:


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