CWnd::GetDC, получается, вызывать нет смысла.
Потому что он возвращает экземляр класса CDC, который когда-нибудь будет удалён, но в нём хранится результат ::GetDC , поэтому парный вызов нужен ::ReleaseDC, а не ::DeleteDC.
Код
CDC* dc = wnd->GetDC();
...
wnd->ReleaseDC(dc);
тоже некорректен, т.к. ReleaseDC не обнулит HDC в CDC, и ::DeleteDC всё равно будет лишний раз вызван
Т.е. лучше вообще не использовать CWnd::GetDC , а делать так
CWindowDC dc(wnd);