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