2011-11-27 2 views
3

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

+8

Какой текст? Какой фон? Пожалуйста, будьте более конкретными. –

+0

cout << "Этот текст"; – Wizard

+1

Итак, вы имеете дело с консольным приложением? – Bart

ответ

8

Цвет - это не C++ вещь, а свойство вашего terminal. Если ваш терминал говорит 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; 

Википедия имеет list of ANSI escape sequences.

+1

Будет ли это работать в командной строке Windows? – Ferruccio

+2

Вопрос был о WINDOWS. Это не работает в Windows Windows. – Kyberias

+1

@ Kyberias: В Windows NT он загружает (загружает ansi.sys) (https://support.microsoft.com/kb/101875), как в DOS, или позже, если вы скажете 'cmd.exe/kansicon'. –

2

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

Смотрите также: KB319883 How to change foreground colors and background colors of text in a Console window by using Visual C#

11

Вы можете изменить цвета для консольного приложения с помощью 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 функции и Console Screen Buffers для больше информации.

Более полный пример консольных приложений с использованием Win32 доступен here.

+2

+1 хороший ответ ... но я должен прокомментировать #include "stdafx.h", чтобы запустить этот код на блоках кода ide. – nKandel

Смежные вопросы