Z
Z
Zadavatel_Voprosov2018-10-28 03:20:21
Command line
Zadavatel_Voprosov, 2018-10-28 03:20:21

How to output colored text to the console from a C++ & Visual Studio program under Windows?

Hello! There is a need to output colored text to the console.
Tried different options:
1)SetConsoleTextAttribute();

Expand to view
We display brackets in white, the word ERR! red:
#include <Windows.h>
#include <stdio.h>

int main() {
  HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
  printf("[ ");
       SetConsoleTextAttribute(console, FOREGROUND_RED);
        printf("ERR!");
  SetConsoleTextAttribute(console, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
  printf(" ]");
  system("pause");
  return 0;
}
Да, способ хороший, но приходится вызывать printf 3 раза и делать HANDLE.
Если программа будет запускаться на XP с 64 Мегабайтами DDR2 и старинным (медленном) HDD, то будет видно, что выводятся символы последовательно (особенно с процом на 233 МГц).

1) SetConsoleColor();(self-writing.h)
Expand to view
Выводим тоже самое, но с помощью своего самописа:
#include <Windows.h>
#include <stdio.h>

int main() {
  HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
  printf("[ ");
        SetConsoleColor(Red, Black);
        printf("ERR!");
  SetConsoleColor(White, Black);
  printf(" ]");
  system("pause");
  return 0;
}
А вот тут уже проблемы, т.к. функция SetConsoleColor основана на консольной команде color, которая весь текст окрашивает, а не его часть.
Можно конечно переписать для упрощения первый способ в эту библиотеку, но от трёх разового printf(); не избавит.

In Java, this is all done via ANSI codes , which makes it possible to output multi-colored text in one go, but this does not work in C++.
java example
System.out.println("\u001B[31mRed Text!\u001B[0mNormal Text");
What can you suggest?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Moskus, 2018-10-28
@Moskus

https://stackoverflow.com/questions/4053837/colori...

R
Roman, 2018-10-28
@myjcom

windows 10
EXAMPLE_OF_ENABLING_VIRTUAL_TERMINAL_PROCESSING

code
#include <stdio.h>
#include <wchar.h>
#include <windows.h>

int main()
{
  HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  if (hOut == INVALID_HANDLE_VALUE)
  {
    return GetLastError();
  }

  DWORD dwMode = 0;
  if (!GetConsoleMode(hOut, &dwMode))
  {
    return GetLastError();
  }

  dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
  if (!SetConsoleMode(hOut, dwMode))
  {
    return GetLastError();
  }

  wprintf(L"\u001B[31mRed Text!\u001B[0mNormal Text\r\n");
  
  getchar();
  return 0;
}

5bd5f6b534a33368727521.png

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question