호기심 많은 학생이 질문합니다.
"쌤~~~ printf() 문으로 출력할때 색상을 변경 할 수 있나요?"
'헉~~ 이런건 해 본적이 없는데~~'
부랴부랴 인터넷 검색을 해 보았습니다.
printf("%c[31m",27);
을 입력 하면 콘솔에서 화면 색깔을 바꾸어 준다고 나오네요...
얼른 학생에게 이렇게 하면 되는거야 라고 대답해 주고 나서...
코드블럭에서 테스트를 해 봅니다.
아무리 바꾸어도 안됩니다...
다시 검색을 해 보니 리눅스에서 콘솔 특성을 이용해서
ESC[색상코드m (ESC 의 ASCII값이 27) 을 입력하면 화면 콘솔의 색상을 바꿔 주는 것이었습니다.
따라서 우리가 이용하는 윈도우 환경에서는 아무리 해 봐도 안되더라구요...
그래서 다시 한번 검색을 했습니다.
#include <stdio.h> #include <windows.h> void SetColor(int ForgC) { WORD wColor; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); //표준출력 화면의 핸들을 가져온다. CONSOLE_SCREEN_BUFFER_INFO csbi; //화면의 정보를 담을 버퍼 변수 선언 //화면의 속성값을 바꾼다. if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) //표준출력 화면의 핸들을 csbi 변수로 받아옴 { //색상값을 들어온 데이터를 이용해 변경 wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F); SetConsoleTextAttribute(hStdOut, wColor); //표준출력 속성을 변경 } return; } int main() { SetColor(1); printf("테스트"); } |
이렇게 함수를 만들어 사용하면 되네요.
색상은 다음과 같습니다.
0 = Black
1 = Blue
2 = Green
3 = Aqua
4 = Red
5 = Purple
6 = Yellow
7 = White
8 = Gray
9 = Light Blue
A = Light Green
B = Light Aqua
C = Light Red
D = Light Purple
E = Light Yellow
F = Bright White
위에서 사용한 SetConsoleTextAttribute(hStdOut, wColor);
이 문장을 다음과 같이 메인에서 직접 사용할 수도 있습니다.
GetSdtHandle 을 통해서 표준출력 핸들을 받아 온 후 바로 Color 을 변경하면서 설정이 가능합니다.
그런데 이것보다도 더 간단한 방법이 있더군요...
system("COLOR FA"); |
system 에 COLOR 를 변경하는데 FA 에서 앞의 F는 바탕색을 흰배경으로 A는 글자 색을 초록으로 변경한다는 명령입니다.
DOS 창을 띄우고 COLOR FA 치면 커맨드 창의 배경색이 바뀌는 것을 이용하는 것입니다.
여기에서 system 은 어떤 프로그램을 실행 시킬때 사용하는 함수로 stdlib.h 에 선언 되어 있습니다.
여기서 두가지 차이점은
system 을 이용한 Color 는 전체 화면의 모든 텍스트를 동시에 바꾸는 것이구요.
SetConsoleTextAttribute(hStdOut, wColor);
이것은 해당 텍스트 이후의 색상을 변경할수 있다는 장점이 있습니다.
혹시라도 C언어 공부하시는 분들이 한번쯤 테스트 해 보면서 텍스트 기반의 프로그램에서도 색상을 바꿔 볼수가 있을것 같네요.^^
'강의자료 > 텍스트기반SW' 카테고리의 다른 글
학생이 파이썬으로 만든 지뢰찾기 게임을 분석해 봅니다. (6) | 2018.01.31 |
---|---|
파이썬의 터틀을 이용한 하트 만들기 (3) | 2018.01.12 |
파이썬의 매력에 흠뻑 빠지다. (4) | 2017.09.29 |
"이것이 자바다" 교재로 선택한 이유 (6) | 2017.08.10 |
게임메이커가 되고 싶다는 우리 둘째 아들... 무엇을 배워야 할까? (2) | 2017.05.19 |