Farebná paletta v textovom režime Windows 10 rubrika: Programování: C/C++

8 xxar3s
položil/-a 23.10. 2:08

VGA textový režim má 16 základných farieb.

Defaultné farby na štýl 80e roky sa mi moc nepáčia, chcel som si namiešať nejaké modernejšie. Teda namiešať si kompletne novú farbnú paletu.

CONSOLE_SCREEN_BUFFER_INFOEX consoleScreenInfo;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
 
GetConsoleScreenBufferInfoEx(hConsole, &consoleScreenInfo);
consoleScreenInfo.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
 
consoleScreenInfo.ColorTable[1] = RGB(86, 156, 214); // tmavo modrá
consoleScreenInfo.ColorTable[9] = RGB(156, 220, 254); // svetlo modrá
 
SetConsoleScreenBufferInfoEx(hConsole, &consoleScreenInfo);
 
SetConsoleTextAttribute(hConsole, 1);
wcout << "Test: dark blue" << std::endl;
SetConsoleTextAttribute(hConsole, 9);
wcout << "Test: light blue" << std::endl;

Lenže stále vidím len základnú paletu, neviete prečo?

Systém v textovom móde zmenu palety podporuje, pre skúšku som si to odtestoval v QB64. A všetko šlape jak hodinky:

SCREEN 0
_PALETTECOLOR 1, _RGB32(86, 156, 214)
COLOR 1
PRINT "Test dark blue"
_PALETTECOLOR 9, _RGB32(156, 220, 254)
COLOR 9
PRINT "Test light blue"

Neviete teda kde mám chybu? Nemôže byť problém v niečom takom že je tých textových režimov viac a ja používam nejaký zastaralý - bez možnosti zmeniť paletu?

odkaz
7 David Macek
odpověděl/-a 24.10. 14:39

Nechápu, proč to API Win32 vyžaduje, ale .cbSize musí být nastaveno před voláním GetConsoleScreenBufferInfoEx(). Jinak tohle nevykládám z hlavy, šlo to celkem jednoduše zjistit. Vypsal jsem si návratové hodnoty a GetLastError(), vyšlo, že Get...Ex() a Set...Ex() neprošly s chybou ERROR_INVALID_PARAMETER. První výsledek od Googlu byla odpověď na StackOverflow, kde byla napsána právě informace o .cbSize.

Komentáře

  • xxar3s : Vďaka to bude asi ono :) ono je to vlastne logické, nechápem že ma to nenapadlo samého, keďže som tento istý problém už riešil pri inej štruktúre. Načo to windows api vyžaduje neviem ani ja (je to asi nejaké bizarne dedičstvo z minulosti, veď Windows API vznikalo začiatkom 90tych rokov) 26.10. 21:27

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.