[C++] ConsoleColor / setColor() / 색 넣는 함수 / how to change color in cmd

2020. 6. 24. 13:13🧑🏻‍💻/C & C++

    비쥬얼 베이직으로 간단한 C언어 게임을 만드려고 하였고, 
C언어 게임을 만들기 앞서 시각적인 효과를 주기 위해서 색상을 넣는 함수를 알아야 했습니다.
가장 먼저 생각난 것은 cmd 명령어인 system("color ~") 였고, 적용을 해본결과 콘솔창이 굉장히
느려지는 단점이 있었습니다.

    여기 저기, 이것 저것 구글링 해본 결과 SetConsoleTextAttribute() 를 알게 되었고,
이에 대하여 정리하고 공유하고자 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <Windows.h>
#include <stdio.h>
 
enum ConsoleColor {
    CC_BLACK,
    CC_DARKBLUE,
    CC_DARKGREEN,
    CC_DARKCYAN,
    CC_DARKRED,
    CC_DARKMAGENTA,
    CC_DARKYELLOW,
    CC_GRAY,
    CC_DARKGRAY,
    CC_BLUE,
    CC_GREEN,
    CC_CYAN,
    CC_RED,
    CC_MAGENTA,
    CC_YELLOW,
    CC_WHITE,
    CC_LIGHTGRAY = 7,
    CC_ORIGINAL = 7,
    CC_ORIGINALFONT = 7,
    CC_ORIGINALBG = 0
};
 
//텍스트, 배경 색상 SET
void setColor(int color, int bgcolor)
{
    color &= 0xf;
    bgcolor &= 0xf;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                           (bgcolor << 4| color);
}
 
//폰트 색상 SET
void setFontColor(int color) 
{
    CONSOLE_SCREEN_BUFFER_INFO buff;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &buff);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                           (buff.wAttributes & 0xf0| (color & 0xf));
}
 
//배경 색상 SET
void setBgColor(int bgcolor) {
    CONSOLE_SCREEN_BUFFER_INFO buff;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &buff);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
                           ((bgcolor & 0xf<< 4| (buff.wAttributes & 0xf));
}
 
//텍스트 색상 GET
int getFontColor() {
    CONSOLE_SCREEN_BUFFER_INFO buff;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &buff);
    return buff.wAttributes & 0xf;
}
 
 
 
//배경 색상 GET
int getBgColor() {
    CONSOLE_SCREEN_BUFFER_INFO buff;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &buff);
    return (buff.wAttributes & 0xf0>> 4;
}
 
//텍스트 색상 Default
__inline void initFontColor() {
    setFontColor(7);
}
 
//배경 색상 Default
__inline void initBgColor() {
    setBgColor(0);
}
 
//텍스트, 배경색 Default
__inline void initColor() {
    setColor(70);
}
 
void main()
{
    int i, j;
    printf("\r\n");
    printf("   0 1 2 3 4 5 6 7 8 9101112131415\n");
    for (j = 0; j < 16; j++) {
        initColor();
        printf(" %2d", j);
        setBgColor(j);
        for (i = 0; i < 16; i++) {
            setFontColor(i);
            printf("♥");
        }
        printf("\n");
    }
    initColor();
}
cs

 

ConsoleColor Heart♥

How to change color in cmd game(console game

 

색 변경으로 제작한 간단한 게임 >  

 

[C / C++] Jumping Cat / C 게임 / C++ 게임 / 고양이 게임

C언어 / C++로 게임을 만들어 보았습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 5..

chanhhh.tistory.com