2011년9월7일_winAPI_DC정보를 수정하여 그래픽출력을 달리하자.
● GDI (Graphic Device Interface)
화면, 프린터 등의 모든 출력 장치를 제어하는 윈도우즈(운영체제)의 핵심모듈.
출력을 위한 중앙 통제 센터라고 할 수 있다.
● GDI Object
그래픽출력에 사용되는 도구로 팬, 브러시, 비트맵, 폰트 등등을 말한다.
GDI 오브젝트 | 핸들 타입 | 설 명 | 디폴트값 | 정의 |
펜 | HPEN | 선의 색 | 검정색 가는 실선 | BLACK_PEN |
브러시 | HBRUSH | 면의 색 | 흰색 | WHITE_BRUSH |
폰트 | HFONT | 문자 출력시 글꼴 | 시스템 글꼴 | SYSTEM_FONT |
비트맵 | HBITMAP | 비트맵이미지 | 선택되지 않음 | |
팔레트 | HPALETTE | 팔레트 | 선택되지 않음 | |
리전 | HRGN | 화면상의 영역 | 선택되지 않음 |
● DC (Device Context)
GDI Object를 모아 놓은 것 –> GDI는 현재 DC에 있는 GDI오브젝트 사용.
● 스톡오브젝트(Stock Object)
윈도우즈가 기본적으로 제공하는 GDI오브젝트.
빈번하게 사용되므로 운영체제가 부팅시 미리 만듬.
프로그래머가 일부러 만들지 않아도 언제든지 사용할 수 있으며 사용하고 난 후에 파괴할 필요도 없다.
framework개념과 비슷하구나..
▷ GetStockObject( )
HGDIOBJ GetStockObject(int fnObject); |
인자로 사용하고자 하는 스톡오브젝트를 지정하는데 사용 가능한 스톡 오브젝트는 다음과 같다.
1: /* Stock Logical Objects */ 2: #define WHITE_BRUSH 0 // 흰색 브러시 3: #define LTGRAY_BRUSH 1 // 밝은 회색 브러시 4: #define GRAY_BRUSH 2 // 회색 브러시 5: #define DKGRAY_BRUSH 3 // 어두운 회색 브러시 6: #define BLACK_BRUSH 4 // 검은 브러시 7: #define NULL_BRUSH 5 // 투명 브러시 8: #define HOLLOW_BRUSH NULL_BRUSH // 투명(?) 브러시 9: #define WHITE_PEN 6 // 흰색 펜 10: #define BLACK_PEN 7 // 검은색 펜 11: #define NULL_PEN 8 // 투명 펜 12: #define OEM_FIXED_FONT 10 // 장치 지원 폰트 13: #define ANSI_FIXED_FONT 11 // 고정폭 폰트 14: #define ANSI_VAR_FONT 12 // 가변폭 폰트 15: #define SYSTEM_FONT 13 // 시스템 폰트 16: #define DEVICE_DEFAULT_FONT 14 // 장치 기본 폰트 17: #define DEFAULT_PALETTE 15 // 기본 팔레트 18: #define SYSTEM_FIXED_FONT 16 // 시스템 고정 폰트 |
주로 무채색의 브러시와 펜만 제공되며 원색 브러시는 직접 만들어 써야 한다.
● 예제코드 : GdiObject
▷ main.cpp
▷ MsgProc.h
▷ MsgProc.cpp
<실행결과>
투명브러시를 사용하여 사각형을 겹쳤다.
다음과 같이 MsgProc.cpp파일을 조금 수정하여 브러시 색깔을 바꾸면,
사격형 내부의 색깔과 두 번재 사격형의 테두리색이 바뀌었다.
예전 DC설정과 현재 바꿀 브러시설정을 저장할 변수를 선언하여,
GetStockObject()를 호출하면 아래와 같이,
DC핸들이 가리키는 곳의 GDI오브젝트(브러시)에 MyBrush의 값이 들어가게 되고,
OldBrush의 값은 과거의 DC설정이 저장된다.