GetObject

원형

int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);

MFC 원형

int CGdiObject::GetObject( int nCount, LPVOID lpObject ) const;

인수

▶hgdiobj : 조사하고자 하는 GDI 오브젝트의 핸들. 비트맵, 브러시, 팬, 폰트 등의 핸들을 준다.

▶cbBuffer : 버퍼에 기록할 정보의 크기. sizeof(lpvObject)값을 주면 된다.

▶lpvObject : 오브젝트의 정보를 리턴받을 구조체의 포인터. 핸들의 타입에 따라 사용되는 구조체가 달라진다. 이 인수를 NULL로 주면 필요한 버퍼의 크기를 리턴해 준다.

핸들

구조체

HBITMAP

BITMAP. 비트맵의 폭, 높이, 색상 정보만 조사되므로 비트맵의 래스터 데이터는 GetDIBits, GetBitmapBits 등의 함수로 조사해야 한다.

CreateDIBSection으로 만든 HBITMAP

DIBSECTION

HPALETTE

팔레트의 엔트리 개수의 WORD. 팔레트의 실제 정보는 GetPaletteEntries 함수로 조사해야 한다.

ExtCreatePen으로 만든 HPEN

EXTLOGPEN

HPEN

LOGPEN

HBRUSH

LOGBRUSH

hFONT

LOGFONT
리턴

조사된 정보의 크기를 리턴해 준다. lpvObject인수가 NULL이면 필요한 버퍼의 크기를 리턴하며 실패시 0을 리턴한다.

설명

GDI 오브젝트에 대한 정보를 구한다. 오브젝트 타입에 따라 적절한 구조체를 선언하고 그 구조체의 포인터를 lpvObject 인수로 전달해 주면 구조체에 조사된 정보를 채워 준다. 이 정보들은 일반적으로 오브젝트를 생성할 때 지정한 정보와 동일하다. 생성 정보를 가지고 있지 않거나 임의의 오브젝트에 대해 동작하는 범용적인 함수를 작성할 때는 이 함수로 오브젝트의 정보를 실행중에 조사해야 한다.

예제 1

다음 예제의 DrawBitmap 함수는 인수로 전달된 hBit 비트맵을 화면으로 출력하되 비트맵 크기만큼만 출력한다.

void DrawBitmap(HDC hdc,int x,int y,HBITMAP hBit)
{
	HDC MemDC;
	HBITMAP OldBitmap;
	int bx,by;
	BITMAP bit;

	MemDC=CreateCompatibleDC(hdc);
	OldBitmap=(HBITMAP)SelectObject(MemDC, hBit);

	GetObject(hBit,sizeof(BITMAP),&bit);
	bx=bit.bmWidth;
	by=bit.bmHeight;

	BitBlt(hdc,x,y,bx+x,by+y,MemDC,0,0,SRCCOPY);

	SelectObject(MemDC,OldBitmap);
	DeleteDC(MemDC);
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static HBITMAP hBit;

	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		hBit=LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
		DrawBitmap(hdc,10,10,hBit);
		DeleteObject(hBit);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

인수로 전달되는 임의의 비트맵에 대해 동작해야 하므로 GetObject 함수로 이 비트맵 오브젝트의 크기를 실행중에 조사하도록 하였다. BITMAP 구조체를 선언하고 GetObject로 정보를 조사한 후 bmWidth, bmHeight 멤버를 읽어 비트맵 크기를 구하였다. 따라서 이 함수는 어떤 크기의 비트맵이라도 임의의 위치에 출력할 수 있다.

참고함수

 

플랫폼

95이상

참조

 


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