(2022) 공부 (Study)/게임 개발 (Development)

[Win32API] GetDC() ~ ReleaseDC() 함수

수낭 2022. 4. 13. 11:25

GetDC() 함수의 경우, case WM_PAINT: 에서 무효화 영역을 해제하는 역할까지 겸하는 BeginPaint()와는 다르게
오롯이 그림을 그리기만 할 목적으로 HDC(m_hdc) 객체, 즉, 그림을 그릴 스케치북과도 같은 판이 필요할 때 이용한다.
(주로 타 함수로 분리해서 작업하는 경우, GetDC()를 쓰게 된다.)

class CCore
{
	SINGLE(CCore);
private:
	HWND	m_hWnd;			// 메인 윈도우 핸들
	HDC 	m_hDC;			// 메인 윈도우에 Draw 할 DC

public:
	int init(HWND _hWnd, POINT _ptResolution);
	void progress();
};

CCore::~CCore()
{
	// static으로 싱글톤 처리된 Core 종료 시점에 해제,
	// 즉, 프로그램이 종료될 때까지 HDC 객체를 가지고 있다가 종료될 때가 되어서야 해제
	// (static 멤버 변수는 데이터 영역에 적재되는데, 이 데이터 영역은 프로그램 종료 시점에 소멸)
	ReleaseDC(m_hWnd, m_hDC);
}

int CCore::init(HWND _hWnd, POINT _ptResolution)
{
	m_hWnd = _hWnd;

	...
    
	// 프로그램 시작 시점에 GetDC()로 HDC를 멤버변수로 보유시킨다.
	m_hDC = GetDC(m_hWnd);
	return S_OK;
}

위 코드에서, GetDC()로 받은 m_hDC에 그림을 그리게 되면, 우리의 Window 창에 그림을 그리는 것이 되는 것이다.