Farebná paletta v textovom režime Windows 10 rubrika: Programování: C/C++
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?
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.
Pro plný přístup na Devel.cz se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře