У меня есть приложение, которое отображает глифы в контекст устройства принтера. Раньше он использовал GDI, и он работал нормально. Но теперь я пытаюсь использовать Directwrite.IDWriteGdiInterop :: CreateBitmapRenderTarget сбой
Я изменил существующий вызов ExtTextOut и использовал функцию IDWriteTextLayout :: Draw.
Мне нужно передать объект, реализующий интерфейс IDWriteTextRenderer в функции рисования.
Я реализовал обратный вызов DrawGlyphRun в интерфейсе IDWriteTextRenderer, используя вызов IDWriteBitmapRenderTarget :: DrawGlyphRun. Итак, мне нужно создать объект IDWriteBitmapRenderTarget.
У меня есть следующий код:
IDWriteFactory* pDWriteFactory = NULL;
IDWriteGdiInterop* pGdiInterop = NULL;
IDWriteTextLayout* pTextLayout = NULL;
IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL;
IDWriteRenderingParams* pRenderingParams = NULL;
hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory), reinterpret_cast<IUnknown**>(&pDWriteFactory));
if (!SUCCEEDED(hr))
pDWriteFactory = 0;
else
{
hr = pDWriteFactory->GetGdiInterop(&pGdiInterop);
if (!SUCCEEDED(hr))
pGdiInterop = 0;
}
hr = pGdiInterop->CreateBitmapRenderTarget((HDC)hDC, someWidth, someHeight, &pBitmapRenderTarget);
Контекст устройства HDC в настоящее время передается функцией в другой DLL.
Результат: ч = E_FAIL
Может быть, я не хватает на что-то очень простой, но у меня мало знаний контекстов устройств и я новичок в DirectWrite. Мне нужно знать, почему одна и та же структура HDC, совместимая с вызовом ExtTextOut, несовместима с DirectWrite.
Кроме того, поскольку поле HDC не является обязательным, если я передаю NULL, он преуспевает, но ничто не будет отображаться функцией draw. Что означает пропуск NULL?