Please Enable JavaScript!
Gon[ Enable JavaScript ]

텍스트에 컬러문자 출력하기

C# & MFC

텍스트에 컬러문자 출력하기


여기서는 비디오메모리 구조와 색상바이트 구조에 대한 설명을 실었다.
그리고, 다음의 color()함수는 텍스트 모드에서 컬러텍스트를 출력하는 함수입니다.
void color(char fore, char back)
/* 텍스트 모드에서 전경색과 배경색을 한꺼번에 지정 */
/* textcolor(), textbackground() 를 통합 개선한 것 */ 
{
      char ATTR;   /* ATTR을 공용변수로 외부선언하면 다른 여러곳에서 사용가능 */
      ATTR=(back*0x10)+fore;
      textattr(ATTR);
}
위의 소스에서 보았듯이 다음과 같이 사용하면 텍스트 모드에서 검은색 바탕에
노란색 문자열을 쉽게 얻을 수 있다
color(YELLOW, BLACK);
cprintf("Misty Blue");
"Misty Blue" 는 정확히 10자이다. 하지만 비디오 메모리 속의 내용은20자를
가지고 있으니, 그중 반은 문자열 내용이고 나머지 반은 색상에 관한 정보를
가지고 있다. 따라서 80*25의 화면을 사용한다면 컴퓨터가 필요로 하는 메모리 양은
80*25*2 Byte
이며, 이때 비디오 메모리 구조는 처음 1 Byte에 문자를 넣고,
그 다음 1 Byte에 색상을 집어넣는 식으로 되어 있다. 이 상태에서 printf()
puts()
함수를 사용하면 컬러가 출력되지 않는다. 따라서 원하는 색상의 컬러를
출력하기 위해서는 cprintf() cputs()를 사용해야 한다. 이때 주의할 점은 cprintf()
cputs()
'\n' 만으로 줄바꾸기가 되지 않으므로 '\r\n'을 사용해야 한다는 점이다
#include                                                 
void main() {           
   clrscr(); 
   textcolor(YELLOW);
   textbackground(BLUE);
   cprintf("Misty Blue"); 
} 
위의 소스를 아래와 같이 변환한다
#include 
                                              
void color(char fore, char back); 
void main(){  
    color(YELLOW, BLUE);
    cprintf("Misty Blue");
}    
void color(char fore, char back){
    textattr((back*0x10)+fore);       
}  
위의 예제에서 보다시피 원하는 색상을 써주기만 하면 반짝거리게 하고 싶을 때에는
BLINK
를 추가하면 된다. color(BLINK+YELLOW, BLUE); 처럼 쓰면 된다.
, BLINK는 글자의 색부분에 붙여야만 한다.

BLINK
conio.h #define BLINK 128 로 정의되어 있고,
128
을 이진수로 고치면 1000 0000 이므로 128을 더하면 blink bit
on
시키게 된다. 지금 쓰이고 있는 색상을 알아내기 위해서는 ATTR이라는
새로운 변수를 만들어 쓰면 될 것이다.

* 영문색상명은 conio.h graphics.h 참고
위의 표에서 실제값 0~7 번까지는 글자색과 배경색으로 모두 사용되는 색상이고,

note) 8~15 번까지는 글자색으로만 사용되는 색상이다. 만약 배경색으로 사용하면
깜박임 바이트 - blink byte - on 되므로 반짝이는 색상으로 변환된다
Posted by 녹두장군

댓글을 달아 주세요