Копируя из комментария, я не поставил его в качестве ответа, так как не могу проверить его, и я не был уверен, правильно ли он, пожалуйста, проверьте его.
В общем случае не рекомендуется использовать вложенные вызовы, например
.
HDC hDC1 = GetDC();
HDC hDC2 = CreateCompatibleDC(hDC1);
..
вместо
HDC hDC = CreateCompatibleDC(GetDC());
(Кстати, в вашем коде HDC, возвращенный GetDC, не освобождается.)