본문 바로가기
[ CODING STUDY ]/》C언어 코드실습

C언어 - [글자 색 변경, 콘솔창 크기, 콘솔창 색, 글자 배경색]

by MRG 2021. 6. 2.
728x90
반응형

▣ 먼저 윈도우 운영체제 기준으로 콘솔 창 크기와 콘솔 창 색을 변경해보겠습니다.

#include <Windows.h> 를 선언해주세요. 

그리고 system("mode con:cols=30 lines=30"); 형식으로 system() 함수 매개변수 안에 문자열 형식으로

mode con을 하게 되면 콘솔에 모드를 바꾼다라는 이야기이고 cols 가로, lines 세로를 변경하는 크기를 의미합니다.

그리고 system("color 30")처럼 콘솔 창에 색을 지정할 수도 있습니다.

 

▣ 글자에 색과 글자에 배경색을 변경하려면 우선 함수를 선언 및 정의를 해야 합니다.

void ColorSet() 함수로 만들고 (int backColor, int textColor)로 매개변수를 각각 지정해줍니다. 

그리고 HANDLE 윈도에 핸들 값을 사용하기 위해 handle에 GetStdHandle(STD_OUTPUT_HANDLE); 값을 정의해줍니다. 

그리고 SetConsoleTextAttribute(handle, (backColor<<4) + textColor);로 지정해줍니다. 

처음 매개변수 값에는 출력 핸들 값을 넣고 이제 나머지는 색 값을 넣어야 합니다. 

그럼 왜 << 비트 연산자를 사용했는지 공부해보겠습니다. 

 

▣ 우선 간단하게 제가 SetConsoleTextAttribute(handle, 50);으로 한 것처럼 두 번째 매개변수에 50을 넣어보겠습니다. 

저 함수는 쉽게 생각해서 50을 2 진수 롤 변경해줍니다. 

그리고 110010으로 2진수로 변경이 되면 16bit로 나열을 해서 보는데 오른쪽 맨 끝 4bit는 글자색으로

글자색 바로 왼쪽 4bit는 배경색으로 지정을 합니다.

그리고 각각 0011, 0010을 다시 10진수로 변경하여 지정된 상수값으로 색을 넣게 됩니다.

그래서 각각 3과 2 이기 때문에 하늘색 초록색으로 지정이 되는 것입니다. 

 

▣ 이렇게 직접 main함수에서 함수를 호출하고 printf()로 글자를 출력해보면 글자색과 배경색이 지정되어서 출력되는 걸 확인할 수 있습니다. 

 

▣ 그럼 다시 우리가 SetConsoleTextAttribute(handle, (backColor<<4) + textColor);로 지정한 경우를 보겠습니다.

제가 backColor 매개변수에 7을 넣어보겠습니다. 그럼 2진수로 바꿔서 0111이 되는데

여기서 비트 연산자 << 4를 하게 되면 0111 0000으로 됩니다. 

그리고 10진수로 변경을 하게 되면 112가 되는데 여기서 우리가 textColor 매개변수 값에 1을 하게 되면 

01110001이 되고 앞에 4bit 배경색 뒤에 4bit 글자색으로 지정을 하게 됩니다.

 

▣ 그럼 이렇게 우리가 원하는 색으로 변경이 되는 걸 확인할 수 있습니다. 

그런데 여기서 우리가 문제가 있습니다. 

색을 하나하나 주석을 처리해서 작성할 수도 있지만,

상수를 한꺼번에 만들어서 사용하면 편리하기 때문에 

enum을 사용하겠습니다. 

 

▣ 이렇게 enum 열거형으로 만들어주시면 열겨형으로 처음에 값이 0으로 시작하기 때문에 

색을 정할 때 숫자를 넣지 않고 원하는 색에 상수 값으로 넣을 수 있습니다. 

 

▣ main함수에서 이렇게 ColorKinds colorkinds열거형을 선언해주시면

ColorSet(green, white); 상수를 사용하여 내가 원하는 색을 지정해서 사용할 수 있습니다. 

 

▣ 그런데 이렇게 printf()로 동시에 두 개를 입력하게 되면 내가 처음에 지정했던 배경색과 글자색으로 지정해서 계속 이어져서 나오는 걸 확인할 수 있습니다. 

 

▣ 그럴 때에는 내가 출력한 코드 위에 색을 지정하고 출력하면 됩니다.

 

▣ 색을 바꾸기 위한 함수에 대한 설명도 참고해주세요.

728x90
반응형

댓글