반응형
앞서 공부하고 정리한 내용은 무료 배포된 유튜브 "얌얌코딩"님의 강의를 시청한 후임을 밝힙니다.
얌얌코딩 (게임 개발)
어려운 게임 개발을 쉽게 배우는 방법!
www.youtube.com
이 윈도우를 가지고 작업할 때 보통 우리는 핸들 (hWnd) 로 접근해서 사용한다.
이때 화면에 그리는 작업을 맡아서 해주는 데이터 구조체를 DC라고 한다.
DC
- 화면에 출력에 필요한 모든 정보를 가지는 데이터 구조체
- GDI 모듈에 의해서 관리된다.
- 어떤 폰트를 사용할지, 어떤 선의 굵기를 정해줄지, 어떤 색상으로 그려줄 것인지 정보를 담고 있다.
- 화면 출력에 필요한 모든 경우는 WINAPI에서는 DC를 통해서 작업을 진행할 수 있다.
- 아래와 같이 선언함으로써 100,100 과 200,200이 right bottom인 직사각형을 그릴 수 있다.
Rectangle(hdc, 100, 100, 200, 200);
- 색깔은 아래와 같이 선언해서 사용할 수 있다.
HBRUSH brush = CreateSolidBrush(RGB(255,0,255));
SelectObject(hdc, brush);
- brush object를 선언한 다음, hdc 메모리 안에서 어떤 색을 선택해서 칠할지를 결정 해주어야 한다.
- 이때, SelectObject 함수는 리턴 값이 있는데, 그 리턴 값은 기존의 old color를 의미한다. (여기선 색깔을 바꿔주기 전 하얀색이 될 것이다)
HBRUSH brush = CreateSolidBrush(RGB(255,0,255));
HBRUSH oldBrush = (HBRUSH)SelectObject(hdc, brush);
- 원래 흰 색으로 돌아간 후, 파란색을 hdc 메모리에서 지워야 한다. 색깔은 그때그때 로드해와서 쓰는게 맞다.
- 이후 원을 다른 곳에 그려주면, 다음과 같이 서로 다른 색깔을 가진 두 개의 도형이 그려지게 된다.
- 마무리로 핑크색 brush를 delete해주어야 한다. Heap 영역에 메모리가 계속 새고 있기 때문.
Ellipse(hdc, 300, 300, 400, 400); //다시 하얀색 원 그리고
DeleteObject(brush); //다 사용한 파란색 브러쉬는 메모리에서 지워주자 !
HPEN 객체를 통한 선 변경
HPEN pinkpen = CreatePen(PS_SOLID, 2, RGB(255, 0, 255));
HPEN oldPen = (HPEN)SelectObject(hdc, pinkpen); //기존의 검은 펜 반환
Ellipse(hdc, 300, 300, 400, 400); //다시 하얀색 원 그리고
SelectObject(hdc, oldPen); //기존 검은펜 다시 잡아주고
DeleteObject(pinkpen); //새로 만든 핑크펜은 메모리에서 지워주기
스톡 오브젝트
- 기본으로 자주 사용되는 GDI 오브젝트들을 미리 DC 안에 만들어 두었는데, 이 오브젝트들을 일컫는다.
- 사용 방법은 아래와 같다.
HBRUSH grayBrush = (HBRUSH)GetStockObject(GRAY_BRUSH);
도형 그리기 과정 요약
- 핸들을 선언한다.
- HPEN MyPen, OldPen;
- GDI 오브젝트를 만든다.
- MyPen = CreatePen();
- DC에 선택하되 이때 이전 핸들을 반드시 저장해 두어야 한다.
- OldPen = SelectObject(...);
- 사용한다.
- Rectangle, Ellipse, ...
- 선택을 해제한다.
- SelectObject(hdc, OldPen);
- 삭제한다.
- DeleteObject(MyPen);
반응형
'게임 엔진 개발' 카테고리의 다른 글
[게임 엔진 개발] - QueryPerformanceFrequency / QueryPerformanceCounter (1) | 2024.07.01 |
---|---|
[게임 엔진 개발] - 키보드 / 마우스 입력 처리 (Input) (1) | 2024.07.01 |
[게임 엔진 개발] enum class & static 변수 선언 (0) | 2024.06.27 |
[게임 엔진 개발] 정적라이브러리 프레임워크 구성 (0) | 2024.06.26 |
[게임 엔진 개발] WinMain 함수란? (0) | 2024.06.25 |