Como mudar a cor do Console em C++

Jinku Hu 11 dezembro 2023
  1. Use os Códigos de Fuga ANSI para mudar a cor do console
  2. Utilize SetConsoleTextAttribute() Método para mudar a cor do Console em C++
Como mudar a cor do Console em C++

Este artigo explicará vários métodos de como mudar a cor do console em C++.

Use os Códigos de Fuga ANSI para mudar a cor do console

Como as cores não fazem parte da biblioteca padrão C++ e as características específicas do console são em sua maioria tratadas pelos sistemas operacionais, não há nenhuma característica de idioma nativo para adicionar cores aos fluxos de saída. Embora, discutimos algumas formas específicas de plataforma para lidar com a saída de texto colorido.

Os códigos de escape ANSI são uma maneira relativamente portátil de resolver este problema. Os códigos de escape são seqüências de bytes que começam principalmente com um caractere de escape ASCII e um caractere de parênteses seguidos de parâmetros. Estes caracteres são incorporados ao texto de saída, e o console interpreta as seqüências como comandos em vez de texto a ser exibido. Os códigos ANSI incluem formatos de múltiplas cores, cujos detalhes completos podem ser vistos em esta página. No exemplo de código a seguir, demonstramos a definição de vários caracteres coloridos como macros e, posteriormente, incluímos estes símbolos nos argumentos de string printf. Observe que o printf concatena várias strings duplamente cotadas passadas no primeiro lugar do parâmetro.

#include <iostream>

#define NC "\e[0m"
#define RED "\e[0;31m"
#define GRN "\e[0;32m"
#define CYN "\e[0;36m"
#define REDB "\e[41m"

using std::cout;
using std::endl;

int main(int argc, char *argv[]) {
  if (argc < 2) {
    printf(RED "ERROR" NC
               ": provide argument as follows -> ./program argument\n");
    exit(EXIT_FAILURE);
  }
  printf(GRN "SUCCESS!\n");

  return EXIT_SUCCESS;
}

Saída (sem argumento de programa):

ERROR: provide argument as follows -> ./program argument

Saída (com argumento do programa):

SUCCESS!

Alternativamente, os mesmos códigos de escape podem ser utilizados com uma chamada cout. Note que não é necessário utilizar o operador de inserção de corrente << várias vezes e apenas combinar os símbolos de macro em conjunto com os literais das strings, pois eles serão combinados automaticamente.

#include <iostream>

#define NC "\e[0m"
#define RED "\e[0;31m"
#define GRN "\e[0;32m"
#define CYN "\e[0;36m"
#define REDB "\e[41m"

using std::cout;
using std::endl;

int main() {
  cout << CYN "Some cyan colored text" << endl;
  cout << REDB "Add red background" NC << endl;
  cout << "reset to default colors with NC" << endl;

  return EXIT_SUCCESS;
}

Resultado:

Some cyan colored text
Add red background
reset to default with NC

Utilize SetConsoleTextAttribute() Método para mudar a cor do Console em C++

O SetConsoleTextAttribute é o método API do Windows para definir as cores do texto de saída utilizando parâmetros diferentes. Esta função define os atributos dos caracteres escritos no buffer de tela do console pelas funções WriteFile ou WriteConsole. A descrição completa dos atributos dos caracteres pode ser vista nesta página.

#include << windows.h>>

#include <iostream>
#include <string>

using std::cout;
using std::endl;

int main() {
  std::string str("HeLLO tHERe\n");
  DWORD bytesWritten = 0;

  HANDLE cout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(console_handle,
                          FOREGROUND_RED | BACKGROUND_INTENSITY);
  WriteFile(cout_handle, str.c_str(), str.size(), &bytesWritten, NULL);

  return EXIT_SUCCESS;
}

Resultado:

Some red colored text
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ IO