GetDC

원형 HDC GetDC( HWND hWnd);
MFC 원형 CDC* CWnd::GetDC( );
인수 ▶hWnd:DC를 구하고자 하는 윈도우 핸들. NULL일 경우 전체 화면에 대한 DC가 구해진다.
리턴 성공하면 DC핸들을 리턴해 준다. 실패시 NULL을 리턴한다.
설명

윈도우즈 환경에서 화면이나 프린터로 출력을 하려면 DC를 먼저 구해야 한다. DC를 구하는 일반적인 방법은 두 가지가 있는데 WM_PAINT 메시지내에서 DC를 얻을 때는 BeginPaint, EndPaint 함수쌍을 사용하며 이 메시지 이외의 코드에서 DC를 얻을 때는 GetDC, ReleaseDC 함수쌍을 사용한다. GetDC의 인수로 DC를 구하고자 하는 핸들을 주면 이 윈도우의 DC를 구해준다. 윈도우의 클래스 스타일에 따라 윈도우 DC와 클래스 DC가 구해지는 경우도 있으나 대부분의 경우 작업 영역에 그리기를 할 수 있는 커먼 DC가 리턴된다. GetDC와 ReleaseDC 함수로 DC를 구해 사용하는 일반적인 코드는 다음과 같다.

HDC hdc;
hdc=GetDC(hWnd);
각종 출력문에서 hdc를 사용한다.
ReleaseDC(hWnd, hdc);

GetDC 함수로 DC핸들을 구해 GDI 함수 호출에 사용하며 사용이 끝난 DC는 ReleaseDC 함수로 반드시 해제해 주어야 한다. 단 클래스 DC나 프라이비트 DC인 경우는 해제를 해 주지 않아도 된다. GetDC 함수로 얻은 DC핸들은 한 스레드 내에서만 사용해야 하며 95/98에서 스레드당 최대 5개까지의 DC를 동시에 열 수 있다.

예제 1

다음 예제는 마우스 왼쪽을 버튼을 누를 때마다 클릭한 위치에 "Click"문자열을 출력한다. WM_PAINT외의 메시지 루틴에서 DC핸들을 구해야 하므로 GetDC 함수를 사용하여 DC를 구하며 사용하고 난 후에 ReleaseDC 함수로 DC를 해제하였다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		hdc=GetDC(hWnd);
		TextOut(hdc,LOWORD(lParam),HIWORD(lParam),"Click",5);
		ReleaseDC(hWnd,hdc);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

출력 결과는 다음과 같다. WM_PAINT에서 그리기를 하지 않았으므로 이 출력은 언제든지 지워질 수 있다.

참고함수 ReleaseDC
플렛폼 95이상
참조 3장 참조

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