요즘은 GDI를 사용할 일이 없겠지만 간혹 사용할 일이 생긴다. 최근 uxtheme를 파고들다보니 다시 접하게 되었는데 GDI 정보가 생각보다 일관성이 없다.
일단 내가 오래전에 봤던 내용 중 기억에 남아있고 하던 코딩 방식은 아래와같았다.
static void TestDC()
{
HDC hdc = GetDC(NULL);
HDC memDC = CreateCompatibleDC(hdc);
HBITMAP memBitmap = CreateCompatibleBitmap(hdc, 100, 100);
HBITMAP oldBitmap = (HBITMAP)SelectObject(memDC, memBitmap);
// ...
SelectObject(memDC, oldBitmap);
DeleteObject(memBitmap);
DeleteDC(memDC);
ReleaseDC(NULL, hdc);
}
DC 객체를 생성하고 처음 SelectObject하면 반환되는 기본 객체는 DC를 지우기 전 다시 SelectObject로 기본 객체를 선택하여 DC를 지워야한다는 것이였다.
GDI 오브젝트 개수를 확인하는 코드를 구글링하니 GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS)
이러한 코드가 나왔다(참조 링크). 이걸 참조하여 아래와같이 수정하여 실행해보았다.