C ++로 콘솔에 컬러 텍스트를 어떻게 쓸 수 있습니까? 즉, 다른 색상으로 다른 텍스트를 어떻게 쓸 수 있습니까?
C ++로 콘솔에 컬러 텍스트를 어떻게 쓸 수 있습니까? 즉, 다른 색상으로 다른 텍스트를 어떻게 쓸 수 있습니까?
답변:
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// you can loop k higher to see more color choices
for(int k = 1; k < 255; k++)
{
// pick the colorattribute k you want
SetConsoleTextAttribute(hConsole, k);
cout << k << " I want to be nice today!" << endl;
}
문자 속성 "k"값을 해석하는 방법은 다음과 같습니다.
Name FG BG
Black 30 40
Red 31 41
Green 32 42
Yellow 33 43
Blue 34 44
Magenta 35 45
Cyan 36 46
White 37 47
Bright Black 90 100
Bright Red 91 101
Bright Green 92 102
Bright Yellow 93 103
Bright Blue 94 104
Bright Magenta 95 105
Bright Cyan 96 106
Bright White 97 107
#include <iostream>
#include <string>
int main(int argc, char ** argv){
printf("\n");
printf("\x1B[31mTexting\033[0m\t\t");
printf("\x1B[32mTexting\033[0m\t\t");
printf("\x1B[33mTexting\033[0m\t\t");
printf("\x1B[34mTexting\033[0m\t\t");
printf("\x1B[35mTexting\033[0m\n");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[37mTexting\033[0m\t\t");
printf("\x1B[93mTexting\033[0m\n");
printf("\033[3;42;30mTexting\033[0m\t\t");
printf("\033[3;43;30mTexting\033[0m\t\t");
printf("\033[3;44;30mTexting\033[0m\t\t");
printf("\033[3;104;30mTexting\033[0m\t\t");
printf("\033[3;100;30mTexting\033[0m\n");
printf("\033[3;47;35mTexting\033[0m\t\t");
printf("\033[2;47;35mTexting\033[0m\t\t");
printf("\033[1;47;35mTexting\033[0m\t\t");
printf("\t\t");
printf("\n");
return 0;
}
g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi
표준 C ++에는 '색상'이라는 개념이 없습니다. 그래서 당신이 묻는 것은 운영 체제에 따라 다릅니다.
Windows의 경우 SetConsoleTextAttribute 함수를 확인할 수 있습니다 .
* nix에서는 ANSI 이스케이프 시퀀스 를 사용해야합니다 .
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int col=12;
// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236
FlushConsoleInputBuffer(hConsole);
SetConsoleTextAttribute(hConsole, col);
cout << "Color Text";
SetConsoleTextAttribute(hConsole, 15); //set back to black background and white text
SetConsoleTextAttribute(hConsole, 15);
에 세트 색상 순백색 ,하지에 화이트 . 7-흰색. 및 15-Bright White
Windows 10에서는 다음과 같이 이스케이프 시퀀스를 사용할 수 있습니다.
#ifdef _WIN32
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif
// print in red and restore colors default
std::cout << "\033[32m" << "Error!" << "\033[0m" << std::endl;
Windows 콘솔 창에 대해 이야기하고 있다고 가정하고 MSDN Library 설명서에서 콘솔 기능을 찾아보십시오.
그렇지 않으면 또는 더 일반적으로 콘솔에 따라 다릅니다. 색상은 C ++ 라이브러리에서 지원되지 않습니다. 그러나 콘솔 처리를위한 라이브러리는 색상을 지원할 수 있습니다. 예 : Google "ncurses colors".
연결된 직렬 터미널 및 터미널 에뮬레이터의 경우 "이스케이프 시퀀스"를 출력하여 제어 할 수 있습니다. 일반적으로 ASCII 27 (ASCII의 이스케이프 문자)로 시작합니다. ANSI 표준과 많은 사용자 지정 체계가 있습니다.
할 수있는 가장 간단한 방법은 다음과 같습니다.
#include <stdlib.h>
system("Color F3");
여기서 "F"는 배경색에 대한 코드이고 3은 텍스트 색상에 대한 코드입니다.
다른 색상 조합을 보려면 주변을 엉망으로 만드십시오.
system("Color 1A");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 3B");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 4c");
std::cout << "Hello, what is your name?" << std::endl;
참고 : Windows에서만 테스트했습니다. 공장.
정말 뭘하고 싶은지 모르겠지만 C ++ 프로그램이 콘솔에 컬러 텍스트를 출력하기를 원한다고 생각합니다. 맞죠? Windows에 대해서는 모르지만 모든 Unices (Mac OS X 포함)에서는 ANSI 이스케이프 시퀀스 를 사용하기 만하면됩니다 .
Windows에서는 전경 (텍스트)과 배경에 빨간색 녹색과 파란색의 조합을 사용할 수 있습니다.
/* you can use these constants
FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
std::cout << "I'm cyan! Who are you?" << std::endl;
전체 화면을 색상으로 채우지 않으려면 "system ("Color… ")"을 사용하지 마십시오. 다음은 컬러 텍스트를 만드는 데 필요한 스크립트입니다.
#include <iostream>
#include <windows.h>
int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};
HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
WORD index = 0;
SetConsoleTextAttribute(hstdout, colors[index]);
std::cout << "Hello world" << std::endl;
FlushConsoleInputBuffer(hstdin);
return 0;
}
여기 cplusplus 예제 는 콘솔에서 색상을 사용하는 방법의 예입니다.