在C和C ++中更改控制台输出的背景颜色

时间:2013-12-22 02:51:31

标签: c++ c

我使用“system”命令在控制台中更改背景和文本颜色。

    #include <iostream>

using namespace std;

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

cin.ignore();
return 0;
}

有没有办法只在一行中改变颜色? C或C ++很好。 感谢。

1 个答案:

答案 0 :(得分:4)

我假设您正在使用Windows,因为system()函数正在执行color,这是Windows的控制台实用程序。

如果您要为Windows编写程序,并且想要更改文本和/或背景的颜色,请使用:

   SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), attr);

其中attr是值与|(按位OR运算符)的组合,以选择您想要更改前景或背景颜色。更改适用于写入控制台的下一个函数(例如printf())。

有关如何编码attr参数的详细信息,请点击此处: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682088%28v=vs.85%29.aspx#_win32_character_attributes

例如,此程序使用黄色文本(红色+绿色+强度)在蓝色背景下,在Windows 2000或更高版本的计算机上打印“Hello world”:

#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;
}