Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Изменение цвета фона консольного приложения в С++

#cpp #консоль #background


Как задать цвет тексту я знаю через SetConsoleTextAttribute, это как-то быстро далось,
а вот именно фон, как-то не дается. Пробовал вариант с system("color  номер нужного
цвета");, но как-то все не то что нужно получается. Задача у меня такая, чтоб пользователь
сам выбирал и цвет текста и цвет фона, а результат уже в консоль.
Мне не нужно решение, хочу сам понять. Перерыл весь MSDN, что-то я там так и не нашел.
Дайте пожалуйста, ссылку на нужный ресурс или подскажите в целом, куда смотреть? Google
облазил вдоль и поперек, но не попалось ничего из того что нужно, те варианты, мне
не подходят. По-идее, так как задача простая, решение тоже долно быть простым.
Работаю в Visual Studio 2017 
    


Ответы

Ответ 1



#include #include HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); // получение дескриптора // окна консоли // перечисление доступных цветов enum class color : unsigned short { black, blue, green, cyan, red, magenta, brown, lightgray, darkgray, lightblue, lightgreen, lightcyan, lightred, lightmagenta, yellow, white }; // меняет цвет в консоли на указанный // foreground - цвет текста // background - цвет фона void set_col(color foreground, color background) { SetConsoleTextAttribute( hout, // дескриптор окна консоли в котором необходимо изменить цвет ((short)background << 4) | (short)foreground); // флаг // в котором закодирован необходимые цвета // (short)background << 4 - приводим к типу short и смещаем на 4 бита влево // (short)foreground - приводим к типу short и объединяем бинарным или | } int main() { set_col(color::green, color::white); std::cout << "Green text on white background"; std::cin.get(); return 0; } На счет обработки ввода пользователя: тут на выбор, как реализовывать. Пользователь может вводить строку. Потом грубым перебором if-ом. Можно добавить std::map. Пользователь может также вводить число (но это не юзер-френдли).

Ответ 2



Если не хочешь разбираться с , то могу предложить решение с system: string color = "color 0F"; while (true) { system("cls"); cout << "Choose color: " << endl << endl; cout << "\t0 — черный" << endl; cout << "\t1 — синий" << endl; cout << "\t2 — зеленый" << endl; cout << "\t3 — голубой" << endl; cout << "\t4 — красный" << endl; cout << "\t5 — лиловый" << endl; cout << "\t6 — желтый" << endl; cout << "\t7 — белый" << endl; cout << "\t8 — серый" << endl; cout << "\t9 — свело - синий" << endl; cout << "\tA — светло - зеленый" << endl; cout << "\tB — светло - голубой" << endl; cout << "\tС — светло - красный" << endl; cout << "\tD — ярко - розовый" << endl; cout << "\tE — светло - желтый" << endl; cout << "\tF — ярко - белый" << endl; char ch = _getch(); if (ch > 47 && ch < 58) // ввод для цифр { color[6] = ch; system(color.c_str()); } else if (ch > 96 && ch < 103) // ввод для строчных букв { color[6] = ch; system(color.c_str()); } else if (ch > 64 && ch < 71) // ввод для заклавных букв { color[6] = ch; system(color.c_str()); } if (ch == 27) break; } Ну и цвет текста аналогично. Собственно, задачу решает. Если что не так понял - извиняй)

Комментариев нет:

Отправить комментарий