我很难理解这个问题,让dwrite_1.h中的更新/扩展函数与我现有的代码一起工作,希望有人能提供帮助。
这是我现有的设置。。。
// 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链接其在dwrite_1.h 中定义
但是,如果我将IDWriteTextLayout*更改为IDWriteTextLayout1*,我会收到一个错误(C2664(,因为pDWriteFactory_无法用IDWriteTextlay1作为参数初始化-无法转换。如果将IDWriteFactory*更改为IDWriteFactory1*,仍然会发生此错误。
所以我在这里缺少了一些东西,我曾希望IDWriteTextLayout1能够扩展功能,但仍然与现有的IDWriteFactory::CreateTextLayout函数向后兼容,但事实并非如此。
如果有人能透露一些信息,我将不胜感激。
获得IDWriteTextLayout后,对IDWriteTextLayout1执行QueryInterface。
IDWriteTextLayout1 * pLayout1 = nullptr;
hr = pTextLayout->QueryInterface(IID_PPV_ARGS(&pLayout1));
if(FAILED(hr))
{ /* handle error */ }