C++ 如何使用DWriteAPI从资源中加载字体?

C++ 如何使用DWriteAPI从资源中加载字体?,c++,winapi,fonts,directwrite,C++,Winapi,Fonts,Directwrite,我想从编译后的资源中加载字体,该资源就是程序本身。我可以在使用GDI时使用AddFontMemResourceEx加载它。但是,Direct2D有自己的Dwrite API,它与GDI不兼容。建议使用CreateCustomFontFileReference+CreateCustomFontCollection。有人能给我举个例子吗?看看GitHub上microsoft/windows经典示例repo()中的DirectWriteCustomFontSets示例。它演示了五种使用自定义字体集的场

我想从编译后的资源中加载字体,该资源就是程序本身。我可以在使用GDI时使用AddFontMemResourceEx加载它。但是,Direct2D有自己的Dwrite API,它与GDI不兼容。建议使用
CreateCustomFontFileReference
+
CreateCustomFontCollection
。有人能给我举个例子吗?

看看GitHub上microsoft/windows经典示例repo()中的DirectWriteCustomFontSets示例。它演示了五种使用自定义字体集的场景,根据您的问题,案例4似乎适用于您的情况:“使用内存缓冲区中包含的字体数据创建自定义字体集。”

对于这种情况,关键界面是,这是在Windows 10 Creators更新(2017年春季)中添加的

示例项目中最相关的特定文件包括:

  • CustomFontSetManager.h/.cpp-这包括适用于其他场景的成员
  • BinaryResources.h/.cpp
  • Document.h/.cpp-这被描述为模拟包含字体数据的文档文件(例如,.doc文件),但它可以是任何类型的二进制文件

谷歌搜索一下:@SimonMourier谢谢你的帮助,你不觉得这个例子太夸张了吗?您能否只编写一个函数“将资源字体安装到系统”?
AddFontMemResourceEx
函数,如果使用得当,将在调用它的可执行文件期间有效地安装字体。也就是说,如果该函数成功,您可以像安装字体一样使用该字体。@AdrianMole我刚刚试过。它不适用于dwrite。我成功地得到了控制。但是我不能使用TextFomat结构中的字体。另一种方法是使用IDWriteInMemoryFontFileLoader,但这可能需要最新的Windows版本。如果你需要它与Windows7+一起工作,你必须使用一个定制的加载程序。