Как изменить цвет текста или фона в консольном приложении Windows - PullRequest
3 голосов
/ 27 ноября 2011

Какая функция C ++ меняет цвет текста или фона (MS Visual studio)? Например cout<<"This text"; как сделать "Этот текст" красным цветом.

Ответы [ 3 ]

14 голосов
/ 27 ноября 2011

Вы можете изменить цвета для консольного приложения, используя 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;
}

Посмотрите документацию MSDN для функции SetConsoleTextAttribute и Буферы экрана консоли для получения дополнительной информации.

Более полный пример консольных приложений, использующих Win32, доступен здесь .

8 голосов
/ 27 ноября 2011

Цвет - это не C ++, а свойство вашего терминала . Если ваш терминал говорит ANSI (например, любой терминал Linux или DOS или Windows NT, если вы добавляете DEVICE=C:\DOS\ansi.sys в config.sys, или более позднюю версию Windows, если вы вызываете оболочку с cmd.exe /kansicon), то вы можете попробовать следующую уловку:

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

В Википедии есть список escape-последовательностей ANSI .

2 голосов
/ 27 ноября 2011

Я считаю, что вы ищете функцию SetConsoleTextAttribute.Первый параметр, hConsoleOutput, будет стандартным дескриптором вывода, полученным через GetStdHandle(STD_OUTPUT_HANDLE).Второй параметр представляет собой побитовое ИЛИ (|) комбинацию требуемых символьных атрибутов .

См. Также: KB319883 Как изменить цвета текста и фона текста вконсольное окно с помощью Visual C #

...