使用 DirectWrites SetCharacterSpacing 函数

Using DirectWrites SetCharacterSpacing function

我很难理解这个问题,让 dwrite_1.h 中的 newer/extended 函数与我现有的代码一起工作,希望有人能提供帮助。

这是我现有的设置...

// In the .h file

IDWriteFactory* pDWriteFactory_ = nullptr;
IDWriteTextFormat* pTextFormat_ = nullptr;
IDWriteTextLayout* pTextLayout_ = nullptr;
IDWriteTextRenderer* pTextRenderer_ = nullptr;

//in the .cpp file - this is in my own PrepareText() Function.

hr = pDWriteFactory_->CreateTextLayout(
    str.c_str(),
    str.size(),
    pTextFormat_,
    gfx.GetWindowWidth(),
    gfx.GetWindowHeight(),
    &pTextLayout_);

我希望能够使用此处概述的 IDWriteTextLayout1::SetCharacterSpacing 功能: MSDN Link 在 dwrite_1.h

中定义

但是,如果我将我的 IDWriteTextLayout* 更改为 IDWriteTextLayout1*,我会收到错误 (C2664),因为 pDWriteFactory_ 无法使用 IDWriteTextLayout1 作为参数进行初始化 - 无法转换。如果我将 IDWriteFactory* 更改为 IDWriteFactory1*,仍然会出现此错误。

所以我在这里遗漏了一些东西,我曾希望 IDWriteTextLayout1 可以扩展功能,但仍然向后兼容现有的 IDWriteFactory::CreateTextLayout 功能,但事实并非如此。

如果有人能提供一些帮助,我将不胜感激。

获得 IDWriteTextLayout 后,为 IDWriteTextLayout1 执行 QueryInterface。

IDWriteTextLayout1 * pLayout1 = nullptr;
hr = pTextLayout->QueryInterface(IID_PPV_ARGS(&pLayout1));
if(FAILED(hr))
{ /* handle error */ }