본문 바로가기

3.구현/VC++

DOS창에서 일부 출력 문자열 색상 변경하기

DOS창에서 색상을 변경하기는 사실 쉽다. 가장 쉽게 구할 수 있는 것이 "color"라는 도스 명령어를 이용하면 된다.
이는 화면 전체 색상을 손쉽게 변경한다. 아마 대부분 이를 이용할 것이다.

그러나 내가 원하는 것은 출력 결과에서 일부 결과를 색상을 변경해서 출력하고 싶었다. 아무리 찾아봐도 찾기 힘들었다. 포기하다가~ 오늘 다시 구글샘에게 물어보니 다행이 원하는 결과를 줬다. 구글샘 사랑해요~

작성일: 2009.09.21 (http://ospace.tistory.com/), ospace114@empal.com

실제 해보기

두가지 방식이 있다. 도스 명령어을 사용하는 방법과 코드 내에 내장하는 방식이 있다.
전자는 ctext라는 프로그램을 이용한 것이고, 후자는 SetConsoleTextAttribute()이용 한 것이다.

CTEXT 사용

먼저 이를 사용하려면 다운받아야 한다.

위 사이트에서 손쉽게 받을 수 있다. 이는 ANSI 없이도 컬러 텍스트를 출력할 수 있게해준다. 근데 이 프로그램이 windows me까지 지원했었다. 다행이 XP까지 잘 지원된다고 한다. 그 이상은 언급이 없다. 본인도 테스트해보지 않았기 때문에 장담할 수 없다.

간단한 예제를 보자. 자세한 예제는 다운 받은 파일에 있기 때문에 참고하길 바란다.

ctext.exe "{0A}0A - Bright Green{\n}"

근데 주의 할 것은 다음 프롬프트까지 녹색으로 변경되었다. 그렇기에 항상 원래 색상으로 변경해줘야한다. 역쉬 같은 형식으로 사용하면 된다.

ctext.exe "{07}07 - White{\n}"

한가지 응용으로 ctext.exe로는 글자 색만 변경하고, 실제 출력은 다른 곳에서 할 수 있다. 예를 들어 echo를 사용한 예를 보자.

ctext.exe "{0A}"
@echo 02 - Green
ctext.exe "{07}"

위와 같이 사용할 수 도 있다. 결과는 같다.

SetConsoleTextAttribute() 사용

위는 코드 내에 직접 사용하는 것이다. 실제 코드를 보면 다음과 같다. 아래 코드는 http://www.dreamincode.net/code/snippet1491.htm에서 직접 가져왔다.

/*******************************************************************  
     Use this function to set the color of text output to the screen. 
     This is for windows platform only.

     Required header  <windows.h>

COLOR CODES:

1   BLUE
2   GREEN
3   CYAN
4   RED
5   MAGENTA
6   BROWN
7   LIGHTGRAY
8   DARKGRAY
9   LIGHTBLUE
10  LIGHTGREEN
11  LIGHTCYAN
12  LIGHTRED
13  LIGHTMAGENTA
14  YELLOW
15  WHITE
***********************************************************************/

void setcolor(unsigned int color) 
{                                    
    if (color >15 || color <=0)
    {
        printf( "Error\n");

    }
    else
    {    
        HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(hcon,color);
    }
}   

사용법은 쉬울 것이다. 당연히 출력 코드 이전에 setcolor()를 호출하고 다시 원래 색상으로 setcolor() 해주면 된다.

결론

이렇게 해서 도스 창에서 색상을 지정해주면 좀 더 가독성이 높아지는 장점이 있다. 물론 너무 화려하게 혼란 스럽다.
에러 메시지는 빨간 색으로 사용하면 쉽게 에러를 눈으로 쉽게 확인할 수 있다.

가급적이면 사용할 메시지 타입에 따른 색상을 미리 정해서 3가지 색상 이하로 지정해서 사용하면 좋을 것이다. 물론 기본 색상은 제외이겠지요.ospace.

참조

http://www.dreamincode.net/code/snippet1491.htm
http://dennisbareis.com/freew32.htm

반응형