使用 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 */ }
我很难理解这个问题,让 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 */ }