내장형 하드웨어/WINAPI

WINAPI - 그래픽(GDI 오브젝트)

동화다아아 2011. 9. 7. 15:22

- 스톡 오브젝트
→  윈도우가 미리 제공하는 GDI 오브젝트를 말한다.
→  아주 빈번하게 사용되므로 운영체제가 부팅할 때부터 미리 만들어 놓는다. 일부러 만들지 않아도 얼마든지 사용할 수 있으며 사용하고 난 후에 필요도 없다.
→  다음 함수로 핸들을 얻어 사용한다.

HGDIOBJ GetStockObject(int fnObjet);

→  fnObject 인수에 사용하고자 하는 스톡 오브젝트를 지정한다.
 

예제 : GdiObject

 

LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
       HDC hdc;
       PAINTSTRUCT ps;
       HBRUSH MyBrush, OldBrush;
 
       hdc 
= BeginPaint(hWnd, &ps); // DC를 얻는다.
       MyBrush = (HBRUSH)GetStockObject(GRAY_BRUSH); 
       OldBrush 
= (HBRUSH)SelectObject(hdc, MyBrush); 
       Rectangle(hdc, 
5050300200); // 사각형을 그린다.
       SelectObject(hdc, OldBrush);
       EndPaint(hWnd, 
&ps); // 그리기 종료
       return 0;
}
LRESULT OnDestroy(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
       PostQuitMessage(
0);
       
return 0;
}

→ 브러시 핸들을 저장할 변수 두개를 선언하는데 MyBrush는 그리기에 사용할 브러시 핸들이고 OldBrush는 원래의 브러시를 잠시 저장하기 위한 용도로 사용한다.
→ GetStockObject 함수로 회색의 브러시(GRAY_BRUSH) 핸들을 얻되 MyBrush 변수에 대입하기 위해 (HBRUSH)형으로 캐스팅했다.
→ GetStockObject 함수는 여러 종류의 스톡 오브젝트를 리턴하므로 대입하기 전에 원하는 타입으로 캐스팅해야 한다.

→ 구현 브러시를 사용하기 위해 GDI 오브젝트를 DC에 선택하는데 이 때는 다음 함수를 사용한다.

HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);

→  첫 번째 인수로 DC의 핸들을 주고 두 번째 인수로 GDI 오브젝트의 핸들을 주면 DC에 해당 오브젝트를 선택한다.
→  이후부터 GDI는 그래픽을 출력할 때 선택된 오브젝트를 사용한다. SelectObject가 리턴한ㄴ 값은 새로 선택되는 오브젝트 이전에 선택되어 있던 같은 종류의 오브젝트 핸들이다.

실습
→  겹쳐지는 두개의 사각형을 생성하고 한쪽은 GRAY_BRUSH, 한쪽은 NULL_BRUSH 사용
→  출력 결과