SYSTEM/Windows2010. 1. 2. 01:29
위 2가지가 칼라풀한 글씨를 출력할수 있게해준다..

사용법은 매우 간단하다!

#include "console_color.h" // 헤더파일을 선언해주고

int main()
{
CONSOLE con; // CONSOLE 객체를 생성해준다.
int x = 22;
con.cprintf( 0x1, "message");
con.cprintf( 0x1, "variable %d \n", x );   // 이런식으로 사용할 수있다.

return 0;
}
의미는....
cprintf .. color printf 라는 의미로 지은것이고 2가지 형태로 오버로딩 되어있다.
한가지는 아스키 타입이고 ( multi byte ) 다른 한가지는 유니코드 타입 ( wide char ) 이다.

void cprintf( BG_TEXT_COLOR color, char *format, ... );
void cprintf( BG_TEXT_COLOR color, wchar_t *format, ... );

위의 형태가 원형이면고 BG_TEXT_COLOR 은 색상을 지정할수있는 WORD ( short ) 값이다.
마이크로 소프트에서 지정하는 값들도 있지만 별로 추천하지 않고, 직접 찾아서 쓰는것이 편하다.

다음 프로그램을 실행키시면

다음과 같은 색상표를 얻을 수 있고 원하는 색상을 골라서 16진수로 ( 0x???? ) 로 인자값을 넣어주면된다.

화면을 전체화면 모드로 변경하기위해

_FullScreen() 을 호출 할수 있으며 커서를 숨기거나 변경하기위해 _Cursor() 을 호출해줄 수도 있고,
창의 이름을 변경하기위해 _Title를 호출 할수도 있다.
당연한 애기겠지만.. private에 있는 녀석들은 직접 호출하지 말라는것이니 건드리지 않는것이 좋으며,
public 에 있는 함수중 '_' ( 언더바 )로 시작되는 함수들은 일반적인 유저들이 호출하길 권장하지는 않는다.

또한 동기화를 시키기위해서 ( 커서때문에 동기화가 필요하다 )

CONSOLE con( lpCriticalSection ); 처럼 크리티컬 섹션을 넘겨줌으로서 동기화를 할 수 있다.
멀티 스레드를 사용한다면 권장사양이다.

이외에도 특정위치의 글을 지우기위해 Clear() 을 지원한다.
당연한 사항으로 GotoXY역시 지원한다.

동기화를 하기위해 크리티컬섹션을 넘겨줬다면 비동기화 함수인 cprintf 를 호출한다면, 크리티컬섹션의 의미가 없어지므로,

void _synCprintf( short x, short y, BG_TEXT_COLOR color, char *format, ... );
void _synCprintf( short x, short y, BG_TEXT_COLOR color, wchar_t *format, ... );

위 2가지 동기화 함수를 호출 해야된다.

void cprintf( BG_TEXT_COLOR color, char *format, ... );
void cprintf( BG_TEXT_COLOR color, wchar_t *format, ... );

위 비동기 함수에 비해 출력위치를 지정하는 2가지 인자값이 추가된것이외에는 호출하는데 아무런 지장이없다.

또한 한번에 출력할 수 있는 문자열의 크기는 64로 지정되어 있다.

#define CONSOLE_BUF_SIZE 64

이부분을 수정하여 늘리거나 줄일 수 있다.
너무 큰값을 주게되면 전반적인 성능을 떨어뜨릴 위험이 존재하므로 적당한 값을 주는것이 좋다.

그럼... 이제 간단하게 칼라풀한 콘솔창을 만나보자!
Posted by redbit