Всем привет! Есть потребность в выводе цветного текста в консоль.
Пробовал разные варианты:
1)
SetConsoleTextAttribute();
Развернуть для просмотраВыводим скобки белым, слово ERR! красным:
#include <Windows.h>
#include <stdio.h>
int main() {
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
printf("[ ");
SetConsoleTextAttribute(console, FOREGROUND_RED);
printf("ERR!");
SetConsoleTextAttribute(console, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
printf(" ]");
system("pause");
return 0;
}
Да, способ хороший, но приходится вызывать printf
3 раза и делать HANDLE
.
Если программа будет запускаться на XP с 64 Мегабайтами DDR2 и старинным (медленном) HDD, то будет видно, что выводятся символы последовательно (особенно с процом на 233 МГц).
1)
SetConsoleColor();
(самопис.h)
Развернуть для просмотраВыводим тоже самое, но с помощью своего самописа:
#include <Windows.h>
#include <stdio.h>
int main() {
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
printf("[ ");
SetConsoleColor(Red, Black);
printf("ERR!");
SetConsoleColor(White, Black);
printf(" ]");
system("pause");
return 0;
}
А вот тут уже проблемы, т.к. функция SetConsoleColor
основана на консольной команде color
, которая весь текст окрашивает, а не его часть.
Можно конечно переписать для упрощения первый способ в эту библиотеку, но от трёх разового printf();
не избавит.
В Java это всё делается через
ANSI коды, что даёт вывести многоцветный текст за один раз, но такое не работает в C++.
Java примерSystem.out.println("\u001B[31mRed Text!\u001B[0mNormal Text");
Что можете предложить?