如何在Windows控制台应用程序中更改文本或背景颜色

时间:2011-11-27 13:16:19

标签: c++ text background-color

哪个C ++函数改变文本或背景颜色(MS Visual studio)?例如cout<<"This text";如何制作&#34;此文字&#34;红色。

3 个答案:

答案 0 :(得分:14)

您可以使用Win32更改控制台应用程序的颜色,以下是如何:

的示例
#include "stdafx.h"
#include <Windows.h>
#include <iostream>

using namespace std; 

int main(void) 
{ 
    HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    if (hStdout == INVALID_HANDLE_VALUE) 
    {
        cout << "Error while getting input handle" << endl;
        return EXIT_FAILURE;
    }
    //sets the color to intense red on blue background
    SetConsoleTextAttribute(hStdout, FOREGROUND_RED | BACKGROUND_BLUE | FOREGROUND_INTENSITY);

    cout << "This is intense red text on blue background" << endl;
    //reverting back to the normal color
    SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

    return EXIT_SUCCESS;
}

查看SetConsoleTextAttribute函数的MSDN文档和Console Screen Buffers以获取更多信息。

使用Win32的控制台应用程序的更完整示例可用here

答案 1 :(得分:8)

颜色不是C ++的东西,而是终端的属性。如果您的终端使用ANSI(例如任何Linux终端,或者如果您将DEVICE=C:\DOS\ansi.sys添加到config.sys,则为DOS或Windows NT,如果您使用cmd.exe /kansicon调用shell,则更新Windows),那么您可以尝试下面的噱头:

#define ANSI_COLOR_RED     "\x1b[31m"
#define ANSI_COLOR_GREEN   "\x1b[32m"
#define ANSI_COLOR_YELLOW  "\x1b[33m"
#define ANSI_COLOR_BLUE    "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN    "\x1b[36m"

#define ANSI_COLOR_BRIGHT  "\x1b[1m"
#define ANSI_COLOR_RESET   "\x1b[0m"


std::cout << ANSI_COLOR_RED "Hello World\n" ANSI_COLOR_RESET;

维基百科有list of ANSI escape sequences

答案 2 :(得分:2)

我相信您正在寻找SetConsoleTextAttribute功能。第一个参数hConsoleOutput将是通过GetStdHandle(STD_OUTPUT_HANDLE)获得的标准输出句柄。第二个参数是所需character attributes的按位OR(|)组合。

另请参阅:KB319883 How to change foreground colors and background colors of text in a Console window by using Visual C#