IDWriteGdiInterop::CreateBitmapRenderTarget failing



我有一个应用程序,它将字形呈现到打印机设备上下文中。早些时候,它使用了GDI,并且运行良好。但现在,我正在尝试使用Directwrite。

我已经更改了现有的ExtTextOut调用,并使用了IDWriteTextLayout::Draw函数。

我需要在draw函数中传递一个实现IDWriteTextRenderer接口的对象。

我已经在IDWriteTextRenderer接口中使用对IDWriteBitmapRenderTarget::DrawGlyphRun的调用实现了DrawGlyph Run回调。因此,我需要创建一个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);

另一个dll中的函数正在传递设备上下文hDC。

结果:hr=E_FAIL

也许我错过了一些非常基本的东西,但我对设备上下文知之甚少,而且我是DirectWrite的新手。我需要知道为什么与ExtTextOut调用兼容的HDC结构与DirectWrite不兼容。

此外,由于HDC字段是可选的,如果我传递NULL,它会成功,但draw函数不会渲染任何内容。传递NULL表示什么?

首先确保hDC是有效的内存设备上下文,内存部分很重要。NULL参数表示目标创建自己的与屏幕/桌面兼容的上下文。在任何情况下,都不会自动呈现任何内容,您需要将自己从GetMemoryDC返回的HDC闪电式传输到您的上下文,换句话说,目标仅限于此内存DC,接下来要做什么取决于您自己。

相关内容

  • 没有找到相关文章

最新更新