Я пишу динамическую цветовую палитру для консольного терминала. Дело в том, чтобы заставить последовательности ANSI ESC работать в терминале wincon по умолчанию, достаточно установить эти флаги для дескрипторов консоли:
DWORD dwRequestedOutModes = ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN;
DWORD dwRequestedInModes = ENABLE_VIRTUAL_TERMINAL_INPUT;
но их использование - другое дело. Прямо сейчас мой консольный движок выводит экранный буфер, созданный с CHAR_INFO
с WriteConsoleOutputW()
, но сам CHAR_INFO
поддерживает только 16 цветов схемы по умолчанию.
Использование CONSOLE_SCREEN_BUFFER_INFOEX
снова ограничено 16 цветами, но на этот раз на заказ.
Хорошим моментом является использование консольных ESC-последовательностей, но проблема в том, что я нашел только примеры использования printf()
. Для моего проекта printf слишком медленный и ненадежный, есть ли другой способ назначить последовательность ESC каждому символу в буфере.
Вот пример моего кода:
WriteConsoleOutputW(this->m_hConsole, this->localFrame, (COORD){ (short)this->m_nScreenWidth, (short)this->m_nScreenHeight }, (COORD){ 0,0 }, &this->m_rectWindow);
Процедура рисования: localFrame - это указатель CHAR_INFO
void PrintFrameW(void* self, int x, int y, wchar_t character, short color)
{
struct c_class* this = self;
if (x >= 0 && x < this->nFrameLength&&y >= 0 && y < this->nFrameHeight)
{
this->localFrame[y*this->nFrameLength + x].Char.UnicodeChar = character;
this->localFrame[y*this->nFrameLength + x].Attributes = color;
}
}
Это похоже на код C ++, но это мой собственный C с классами, так что это подведение итогов ANSI-C для образовательных целей.
Вопрос в следующем: Как раскрасить вывод консоли с помощью Escape-последовательностей и где их разместить, чтобы можно было напечатать что-то вроде этого:
* * 1030
используя '' char (пробел) и устанавливая цвет фона на ESC [48; 2; р ; г ; б или ESC [48; 5; s