Для создания временного постоянного тока:
//create memory dc
CClientDC dc(NULL);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, width, height);
memdc.SelectObject(bitmap);
Но в этом случае вам может не понадобиться временный постоянный ток. Вы можете просто использовать настольный DC, если вы не пишете на настольном DC, или не выбираете ничего в настольном DC.
Чтобы получить рабочий стол постоянного тока, используя Windows API:
HDC hdc = ::GetDC(0);
standard = new Gdiplus::Font(hdc, &logfont);
...
ReleaseDC(0, hdc); //cleaup
В качестве альтернативы используйте MFC
CClientDC dc(NULL);
standard = new Gdiplus::Font(dc.GetSafeHdc(), &logfont);
Как и для временных окон, dummyWnd.GetDC()->GetSafeHdc()
не работает в режиме отладкии вызывает ошибку, потому что MFC проверит правильность дескриптора окна.
В режиме выпуска это может фактически работать, потому что это заканчивает тем, что вызывает ::GetDC(NULL)
, который является действительным. Однако это приведет к утечке ресурсов, потому что ReleaseDC
никогда не вызывается.