В соответствии с предложением Ганс Пассант в https://stackoverflow.com/a/9275247/15485 вы можете сопоставить WriteConsoleOutputCharacter
с WriteConsoleOutputAttribute
.
![enter image description here](https://i.stack.imgur.com/91InJ.png)
#include <windows.h>
#include <stdio.h>
void write_symbol_in_color(HANDLE h, SHORT x, SHORT y, const char* symbol, WORD color)
{
COORD here;
here.X = x;
here.Y = y;
WORD attribute = color;
DWORD written;
::WriteConsoleOutputAttribute(h, &attribute, 1, here, &written);
::WriteConsoleOutputCharacterA(h, symbol, 1, here, &written);
}
int main()
{
HANDLE hStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdOut == INVALID_HANDLE_VALUE)
{
printf("Invalid handle");
return 1;
}
write_symbol_in_color(hStdOut, 0, 0, "R", FOREGROUND_RED | FOREGROUND_INTENSITY);
write_symbol_in_color(hStdOut, 1, 0, "G", FOREGROUND_GREEN | FOREGROUND_INTENSITY);
write_symbol_in_color(hStdOut, 2, 0, "B", FOREGROUND_BLUE | FOREGROUND_INTENSITY);
write_symbol_in_color(hStdOut, 3, 0, "C", FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
write_symbol_in_color(hStdOut, 4, 0, "M", FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
write_symbol_in_color(hStdOut, 5, 0, "Y", FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
return 0;
}