728x90
'나우캠퍼스X아워즈팜'유튜브의 'Win32 API 5강. 그래픽 오브젝트 (1/2)'영상을 보고 정리한 내용입니다.
GDI 오브젝트는 그래픽을 출력할 때 사용되는 도구로 브러시, 펜, 폰트 등을 GDI오브젝트로 얻어올 수 있습니다.
GDI 오브젝트 사용 방법은 운영체제에서 제공하는 것을 사용하거나 사용자가 직접 설정하여서 사용하는 방법이 있습니다.
OS에서 제공하는 GDI 오브젝트(스톡오브젝트)를 사용하기 위한 함수.
- HGDIOBJ GetStockObject(int fnObject)
- fnObject는 사용할 스톡 오브젝트
- 위의 함수를 이용하여서 브러시, 펜, 폰트 등의 GDI 오브젝트에 대한 핸들을 얻을 수 있다.
- ex: GetStockObject(BLACK_PEN);
- HGDIOBJ는 브러시 펜 폰트에 대한 공통의 데이터형 핸들이다.
- 그래서 이것으로 GDI오브젝트를 얻은 다음 HPEN, HBRUSH와 같은 형으로 변환해주어야 한다.
임의로 생성하는 GDI오브젝트(펜)
- HPEN CreatePen(펜 스타일(PS_SOLID:실선), 펜 굵기, RGB)
GDI오브젝트를 얻었으면
- 쓰겠다는 함수 : HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj)
- 반납하겠다는 함수 : BOOL DeleteObject(HGDIOBJ hObject)
- 수동 오브젝트는 os의 자원을 사용하는 것이기 때문에 DeleteObject를 할 필요가 없고 임의로 생성을 하는 GDI오브젝트는 반납(DeleteObject함수 사용)을 해야 한다.
선을 그리는 함수 두가지
- BOOL MoveToEx(HDC, x좌표, y좌표, 이전 선의 좌표(보통NULL)); ---> 선을 그릴 시작 좌표 설정
- LineTo(HDC, x좌표, y좌표); ---> 선의 끝 지점을 설정
운영체제에서 제공해주는 스톡 오브젝트를 이용하여 선 그리기
- GetStockObject()로 펜에 대한 핸들 얻어오기.
- SelectObject()함수로 그 GDI 오브젝트(펜) 사용하겠다고 하기.
- MoveToEx(), LineTo() 함수로 선 그려주기
사용자가 생성(지정)한 펜을 사용하여 선 그리기
- CreatePen()으로 펜에 대한 핸들 얻기(펜 생성으로 )
- SelectObject()로 그 펜을 쓰겠다고 하기
- MoveToEx(), LineTo() 함수로 선 그려주기
- DeleteObject로 펜을 반환해주기(쓰지 않는다고 지정)
사각형을 그리는 함수
- Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
- 왼쪽 위(nLeftRect, nTopRect)의 좌표와 오른쪽 아래(nRightRect, nBottomRect)의 좌표만 설정해주면 사각형을 그릴 수 있다. (화면 dc HDC도 설정해야함)
원을 그리는 함수
- Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
- 왼쪽 위(nLeftRect, nTopRect)의 좌표와 오른쪽 아래(nRightRect, nBottomRect)의 좌표만 설정해주면 사각형 안을 꽉 채우는 원을 그릴 수 있다. (화면 dc HDC도 설정해야함)
펜으로는 선만이 아닌 선으로 이루어진 사각형이나 원같은 도형들도 그릴 수 있습니다.
이번에는 또 다른 GDI오브젝트인 브러시에 대해 알아보겠습니다.
브러시(BRUSH)
- 도형의 내부를 색상과 패턴으로 채우는 역할
- 스톡오브젝트를 사용하거나(GetStockObject. 형변환을 하여 사용한다.) 브러시를 직접 생성하여 사용할 수 있다.(DeleteObject()함수로 펜 제거)
스톡오브젝트를 사용하는 방법은 위에 나와있고 직접 브러시를 생성하여서 사용하는 법을 알아보겠습니다.
브러시 생성 함수(임의로 생성하는 GDI오브젝트)
- CreateSolidBrush(), CreateHatchBrush(), CreatePatternBrush(), CreateBrushIndirect(), CreateDIBPatternBrushPt()와 같은 브러시 생성 함수가 있고 CreateSolidBrush()함수를 가장 많이 사용함.
- HBRUSH CreateSolidBrush( COLORREF crColor );
- 색만 지정해주면 된다.
브러시를 생성하여서 사용하는 방법
- CreateSolidBrush()함수로 브러시를 생성
- SelectObject()함수를 이용하여 브러시를 설정(그 브러시를 쓰겠다고 설정)
- 도형 출력
- DeleteObject()함수를 이용하여 생성한 브러시를 제거
- SelectObject()함수를 이용하여 이전 브러시를 복구
운영체제에서 제공해주는 스톡 오브젝트를 이용하여 브러시 사용하기
- GetStockObject()로 브러시에 대한 핸들 얻어오기
- SelectObject()함수를 이용하여 브러시를 설정(그 브러시를 쓰겠다고 설정)
- 도형 출력
- DeleteObject()함수를 이용하여 생성한 브러시를 제거
- SelectObject()함수를 이용하여 이전 브러시를 복구
'무작정 따라해보기(정리, 문제풀기) > Win32API' 카테고리의 다른 글
18. Win32API 프로그래밍 - 키보드 입력 (0) | 2021.08.30 |
---|---|
17. [WIN32API 프로그래밍] GDI오브젝트와 메모리DC를 이용하여 비트맵 이미지 출력하기 (0) | 2021.08.29 |
15. [WIN32 API 프로그래밍] 문자열 출력(그래픽) (0) | 2021.08.17 |
14. [WIN32 API 프로그래밍] 문자, 점 출력(그래픽) (0) | 2021.08.16 |
13. [WIN32 API 프로그래밍] 그래픽 관련 (0) | 2021.08.14 |