Страницы

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

вторник, 5 февраля 2019 г.

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

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


Ответ

#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. Пользователь может также вводить число (но это не юзер-френдли).

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

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