Как изменить цвет конкретного текста для вывода в консоль а не всей консоли?

170
28 августа 2021, 12:00

Я хочу отдельный вывод в программе выделить с помощью цветов. Но при использовании таких вариантов как например:

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_GREEN);

или

system("Color 01");

Цвет меняется во всей консоли, то есть и предыдущий вывод и последующий. А я хочу сделать что то на подобии такой конструкции например условная функция которая выводит какие то данные и ее обернуть чтобы конкретно эта функция вывела значение конкретного цвета. Пытался сделать такой вариант

system("Console 03");
Function();
system("Console 0F");

Но опять же такая обертка не работает ибо меняется текст во всей консоли. Можно ли то что я хочу сделать стандартными средствами c++? Или нужно будет подключить какую-нибудь отдельную либу или средствами gdi окрашивать? Подскажите в сторону чего копать надо.

Answer 1

Если вдруг кто-то захочет сделать подобное, оно достигается путем обертки текста в управляющую последовательность. Например:

cout << "\x1b[31mHello\x1b[0m" << endl;
cout << "\x1b[32mHello\x1b[0m" << endl;
cout << "\x1b[33mWorld\x1b[0m" << endl;

Получится такой вывод: Это получается путем добавления к тексту конструкции \x1b[31 где 31 это цвет получающийся при сложении числа 30 и i-го номера цвета. А в конец я добавляю \x1b[0m чтобы вернуть все в исходное состояние. Подробнее можно посмотреть на https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_ANSI

READ ALSO
оповещение о подключении к сети

оповещение о подключении к сети

Есть ли в линукс какое нибудь оповещение, когда подключаешься к сети? Это для программированияЯ хочу отслеживать интерфейс например, но не знаю...

117
собрать данные из DIV в JSON

собрать данные из DIV в JSON

Есть динамически сформированная корзина заказа (условно):

184
Как можно уменьшить время алгоритма?

Как можно уменьшить время алгоритма?

Считываю текстовый файл, обрабатываю его и записываю в другой файлНо работает это медленно

310
Пропуск катсцены(сделанной с помощью Timeline)

Пропуск катсцены(сделанной с помощью Timeline)

Сразу после загрузки сцены начинает проигрываться катсцена,сделанная с помощью TimelineПотом геймплей, если игрок умирает сцена просто загружается...

156