여러분들 모두 코딩하다가 한 번씩은,
검은 배경에 흰 글씨가 마음에 안 들거나,
다른 색상의 글자를 원한 적이 있으실겁니다.
그래서 오늘은 콘솔 텍스트의 색상을 바꾸는 함수를 알아보고자 합니다!
SetConsoleTextAttribute(핸들 값, 색상정보);
라이브러리:windows.h
실행 버튼을 눌렀을 때 나오는 콘솔 창의 텍스트 색깔을 바꾸려면 함수의 첫 번째 인자에
GetStdHandle(STD_OUTPUT_HANDLE)를 넣어주면 됩니다.
두번째 인자에는 색상 정보를 숫자로 넣어주면 되는데,
이 함수에선 총 16가지의 색깔이 제공됩니다.
0.검정(black) | 8.회색 |
1.파랑(blue) | 9.연한파랑 |
2.초록(green) | 10.연한초록 |
3.옥색(jade) | 11.연한옥색 |
4.빨강(red) | 12.연한빨강 |
5.보라(violet) | 13.연한보라 |
6.노랑(yellow) | 14.연한노랑 |
7.흰색(white) | 15.진한하양 |
이 테이블은 알파벳 순서대로 색상을 정리해 놓았는데요,
보시다시피 0~7에선 기본색상, 여기서 8을 더하면 연한 색상이 나옵니다.
실제로 출력하면 이런 색상입니다!
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
printf("Hello, World!");
를 하면 보라색 글씨로 Hello, World!가 출력되겠죠?
다음은 배경색인데요, 배경색도 위 표에서 제공된 16가지의 색깔을 사용할 수 있습니다.
다만 사용할 때는 색상에 16을 곱해줘야 합니다.
그래서 배경색, 글자색을 같이 변경하려면,
16*배경색상+글자색상 형식으로 넣어주면 됩니다.
총 256개의 경우의 수를 만들 수 있고, 16진수 표현과 거의 유사하다고도 볼 수 있습니다.
앞에 텍스트 색상만 바꿀 때 그냥 넣어주어도 검정 배경으로 나온 이유는 검정이 0번이라서 그런거죠!
그럼 이를 이용한 예시를 한번 볼까요?
#include<windows.h>
#include<stdio.h>
int main(){
char data;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3/*옥색*/);
printf("1.");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
printf("수소는 자연에서 가장 가벼운 원소이다.(O/X)");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14/*연노랑색*/);
printf("\n->");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
scanf("%c", &data);
if(data=='O'){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9/*연파랑색*/);
printf("정답입니다!\n");
}else{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12/*연빨강색*/);
printf("오답입니다...\n");
}
getchar();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3/*옥색*/);
printf("2.");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
printf("우라늄은 자연에서 가장 무거운 원소이다.(O/X)");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14/*연노랑색*/);
printf("\n->");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
scanf("%c", &data);
if(data=='O'){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9/*연파랑색*/);
printf("정답입니다!\n");
}else{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12/*연빨강색*/);
printf("오답입니다...\n");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
return 0;
}
간단한 퀴즈게임인데요, 매줄마다 색상을 계속 바꾸어보았습니다.
색깔만 바뀌었는데 이것보다 훨씬 예쁘게 잘 나왔죠?
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),16*배경색+글자색);
C언어로 코딩할 때 잘 이용해보시길 바랍니다!
'코딩' 카테고리의 다른 글
Topster 만들기(1) (0) | 2023.11.09 |
---|---|
clion PS용으로 설정하기 (0) | 2023.10.31 |
웹 개발을 위한 필수적인 프로그래밍 용어 정리!(1) (0) | 2023.10.29 |