我有一个将字形呈现到打印机设备上下文的应用程序。早些时候,它使用 GDI 并且运行良好。但现在,我尝试改用 Directwrite。
我更改了现有的 ExtTextOut 调用并使用了 IDWriteTextLayout::Draw 函数。
我需要在绘图函数中传递一个实现 IDWriteTextRenderer 接口的对象。
我已经使用对 IDWriteBitmapRenderTarget:: DrawGlyphRun 的调用在 IDWriteTextRenderer 接口中实现了 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 中的函数传递。
结果:hr=E_FAIL
也许我错过了一些非常基本的东西,但我对设备上下文知之甚少,而且我是 DirectWrite 的新手。我需要知道为什么与 ExtTextOut 调用兼容的相同 HDC 结构与 DirectWrite 不兼容。
此外,由于 HDC 字段是可选的,如果我传递 NULL,它会成功,但绘图函数不会渲染任何内容。传递 NULL 意味着什么?