SelectObject

원형 HGDIOBJ SelectObject( HDC hdc,HGDIOBJ hgdiobj);
인수

▶hdc:DC핸들

▶hgdiobj:DC에 선택하고자 하는 GDI 오브젝트의 핸들. 이 오브젝트는 CreatePen, CreateSolidBrush, CreateFont 등의 함수로 생성한 오브젝트이거나 GetStockObject로 구한 스톡 오브젝트여야 한다.

리턴

이전에 선택되어 있던 같은 종류의 GDI 오브젝트의 핸들이 리턴된다. 단 선택한 오브젝트가 리전인 경우 리턴값을 다음 셋 중 하나가 된다.

리턴값 설명
SIMPLEREGION 리전은 하나의 사각형으로 구성되어 있다.
COMPLEXREGION 리전은 하나 이상의 사각형으로 구성되어 있다.
NULLREGION 리전이 비어있다.

에러 발생시 NULL이 리턴된다.

설명

GDI는 그래픽 출력에 사용되는 도구이며 펜, 브러시, 비트맵, 리전, 패스, 팔레트, 폰트 등등이 있다. 그리기에 사용할 GDI 오브젝트를 변경하고자 할 때 이 오브젝트를 만든 후 이 함수로 DC에 선택해 주어야 한다. 다음은 브러시를 생성하여 DC에 선택하는 예이다.

HBRUSH MyBrush,OldBrush;
MyBrush=CreateSolidBrush(RGB(255,255,0));
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
// 브러시를 사용한다.
SelectObject(hdc,OldBrush);
DeleteObject(MyBrush);

CreateSolidBrush로 MyBrush 브러시를 만든 후 SelectObject 함수로 이 브러시를 DC에 선택해 준다. 이 때 SelectObject가 리턴하는 이전 브러시의 핸들은 복구를 위해 OldBrush 등의 변수에 저장해 두어야 한다. 브러시를 선택한 후 모든 그리기 함수는 MyBrush로 면을 채색한다. 브러시를 사용한 후에는 반드시 DeleteObject 함수로 삭제해 주어야 하되 그전에 DC에 선택되어 있는 브러시를 선택해제해 주어야 한다. DC에 선택된 브러시는 삭제할 수 없기 때문이다. 그래서 OldBrush를 다시 선택해 주어 MyBrush를 해제하도록 하였다. 이 코드는 다음과 같이 한줄로 작성할 수도 있다.

DeleteObject(SelectObject(hdc,OldBrush));

SelectObject 함수가 이전에 선택되어 있던 같은 타입의 GDI 오브젝트를 리턴해 주기 때문에 리턴되는 브러시를 DeleteObject 함수로 삭제하였다.

참고함수 DeleteObject
플렛폼95이상
본문참조 6장 참조

written by http://www.winapi.co.kr