我正在使用C ++与DirectWrite配合使用,但似乎无法弄清楚如何使用继承接口中的方法。例如,IDwriteFont1接口中的“ GetUnicodeRanges”方法/函数。
[IDWriteFont1接口/对象不能被任何其他DirectWrite接口/对象访问,包括IDWriteFactory-IDWriteFactory7。
IDWriteFont1接口继承自IDWriteFont接口。我尝试了各种方法来创建IDWriteFont1对象,包括使用DWriteCreateFactory,但是这种方法似乎主要用于创建各种IDWriteFactory对象。
我能够通过DWrite.dll中的DWriteCreateFactory函数通过IDWriteFactory通过IDWriteFontCollection访问IDWriteFont。
任何人都可以提供指导或示例C ++代码吗?
您当然应该能够从IUnknown::QueryInterface
接口指针执行IDWriteFont
并获得IDWriteFont1
,前提是它首先在那里可用并实现。
即一些伪代码:
IDWriteFont* Font = ...
assert(Font);
IDWriteFont1* Font1 = nullptr;
if(SUCCEEDED(Font->QueryInterface(__uuidof(IDWriteFont1), reinterpret_cast<VOID**>(&Font1))))
{
assert(Font1);
...
Font1->GetUnicodeRanges(...)
...
}
其背后的想法是,可扩展性更新通过在同一对象(您的情况下为字体对象)上实现接口的较新版本,来保持原始实现不变并添加新功能。对于使用原始接口使用API的较旧应用程序,更新是透明的,而较新的应用程序可以通过获取较新的扩展接口来发现和使用新功能。这是假定的,但有时文档尚不清楚该如何工作。