강의실/텍스트기반SW

호기심 많은 학생이 질문합니다.


"쌤~~~ 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언어 공부하시는 분들이 한번쯤 테스트 해 보면서 텍스트 기반의 프로그램에서도 색상을 바꿔 볼수가 있을것 같네요.^^






이 장소를 Daum지도에서 확인해보세요.
인천 서구 당하동 1028-2 장원프라자 502호 | 원당컴퓨터학원
도움말 Daum 지도
2 0
  • 버블프라이스 2017.07.27 04:49 신고    

    알기 쉽게 잘 설명해주셔서
    C언어를 배우는 학생분들께 매우 유용한 정보 일 것 같습니다. 오늘도 멋진 하루 되시길 바래요^^

    • 원당컴 2017.07.27 09:22 신고  

      감사합니다. 학생 덕분에 저도 알게 되었어요... 이런 기능이 있다고 해도 사용해 보지 않으면 있는지 전혀 모르니까요.^^