본문 바로가기

무작정 따라해보기(정리, 문제풀기)/Win32API

16. [WIN32API 프로그래밍] 그래픽 오브젝트

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()함수를 이용하여 이전 브러시를 복구