CreateCompatibleDC

원형

HDC CreateCompatibleDC(HDC hdc);

MFC 원형

virtual BOOL CDC::CreateCompatibleDC( CDC* pDC );

인수

▶hdc : 참조할 DC의 핸들. 이 값이 NULL일 경우 현재 화면과 호환되는 DC를 생성한다.

리턴

성공하면 생성한 메모리 DC의 핸들을 리턴하며 실패할 경우 NULL을 리턴한다.

설명

인수로 주어진 hdc와 호환되는 메모리 DC를 생성한다. 여기서 호환된다는 뜻은 색상 포맷이 같다는 뜻이며 색상 포맷이 같은 DC끼리는 비트맵을 전송할 수 있다.

화면 DC는 메모리 상에 존재하는 그리기 표면이다. 실제 화면 DC와 마찬가지로 모든 GDI 출력 함수를 사용할 수 있으므로 프로그램 내부에서 미리 그리기를 할 때 메모리 DC를 사용한다. 메모리 DC로 보내지는 출력은 메모리 DC에 선택되어 있는 비트맵의 표면으로 출력된다.

최초 메모리 DC가 생성되면 그리기 표면은 1픽셀짜리 흑백 비트맵을 가지며 비트맵을 선택해 주면 이 비트맵의 높이와 폭, 색상 포맷을 가지는 그리기 표면이 만들어진다. 따라서 메모리 DC에 미리 그리기를 하고자할 때는 먼저 CreateCompatibleBitmap 함수로 생성한 원하는 크기의 비트맵을 먼저 선택해 주어야 한다. 또는 미리 읽어놓은 그림을 출력할고자 할 때는 LoadBitmap으로 읽은 비트맵을 메모리 DC에 선택해 준 후 BitBlt 등의 함수로 화면 DC로 전송한다.

다음 코드는 비트맵을 화면으로 출력하는 가장 일반적인 코드이다. 화면 DC와 호환되는 메모리 DC를 생성한 후 비트맵을 메모리 DC에 선택하고 BitBlt로 화면 DC로 전송한다. 화면 DC는 비트맵을 선택할 수 없기 때문에 반드시 메모리 DC에 비트맵을 선택한 후 원하는 부분을 화면 DC로 전송해야 한다.

MemDC=CreateCompatibleDC(hdc);
MyBitmap=LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
OldBitmap=(HBITMAP)SelectObject(MemDC, MyBitmap);
GetObject(MyBitmap,sizeof(BITMAP),&bit);
bx=bit.bmWidth;
by=bit.bmHeight;
		
BitBlt(hdc, 0,0,bx,by,MemDC,0,0,SRCCOPY);

메모리 DC를 사용한 후에는 반드시 DeleteDC로 해제해 주어야 한다.

참고함수 CreateCompatibleBitmap
플렛폼 95이상
참조  

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