Изменить цвет фона вывода консоли на C и C ++ [дубликаты]

0

Я меняю цвет фона и текста на консоли с помощью команды "system".

    #include <iostream>

using namespace std;

int main()
{
system ("color 1a");
cout <<"Hello World";

cin.ignore();
return 0;
}

Есть ли способ изменить цвет только в одной строке? C или C++ в порядке. Благодарю.

  • 2
    Конечно, есть лучший способ, чем системная команда, но она будет зависеть от платформы, и вы не упомянули платформу, которую используете.
Теги:

1 ответ

4
Лучший ответ

Я предполагаю, что вы используете Windows, поскольку ваша функция system() выполняет color который является консольной утилитой для Windows.

Если вы собираетесь написать свою программу для Windows и хотите изменить цвет текста и/или фона, используйте это:

   SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), attr);

Где attr - комбинация значений с | (побитовый оператор OR), чтобы выбрать, хотите ли вы изменить цвет переднего плана или фона. Изменения применяются к следующей функции, которая записывает на консоль (например, printf()).

Подробнее о том, как закодировать аргумент attr, можно attr здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682088%28v=vs.85%29.aspx#_win32_character_attributes

Например, эти программы печатают "Hello world", используя желтый текст (красный + зеленый + интенсивность) на синем фоне, на компьютере с Windows 2000 или новее:

#include <stdio.h>
#include <windows.h>

int main()
{
  SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |
                                                            FOREGROUND_GREEN | 
                                                            FOREGROUND_INTENSITY | 
                                                            BACKGROUND_BLUE
                          );
  printf ("Hello world\n");
  return 0;
}

На этом рисунке показана цветная диаграмма, показывающая все комбинации цветов переднего плана и фона:

#include <stdio.h>
#include <windows.h>

int main()
{
  unsigned char b,f;

  for (b=0;b<16;b++)
  {
    for (f=0;f<16;f++)
    {
        SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), b<<4 | f);
        printf ("%.2X", b<<4 | f);
    }
    printf ("\n");
  }
  SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), 0x07);
  printf ("\n");
  return 0;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню