我正在使用C++在Windows上开发游戏应用程序,并使用资源中包含的字体。
我可以通过AddFontMemResourceEx
和CreateFont
加载字体。
并且,在没有安装任何特殊字体的环境下,我可以正确地使用加载的字体呈现文字。
但是,世界上存在着不同版本的字体。
如果系统中已经安装了其他版本的字体,CreateFont
将通过字体名称(pszFaceName
)查找字体,并不方便地优先选择系统字体。
有没有什么办法可以优先选择由AddFontMemResourceEx
加载的专用字体呢?
值得一提的是AddFontMemResourceEx
的返回值是HANDLE
,但我无法找到任何使用它来进行CreateFont
的代码。
可能通过编辑专用字体的字体系列可以避免冲突。
但是,如果可以的话,我想通过编程来解决。
HANDLE handle = AddFontMemResourceEx(data, readBytes, NULL, &fontNum);
hFont = CreateFont(24, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS,
CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"UmePlus CL Gothic");
AddFontMemResourceEx()
返回的HANDLE
只能用于RemoveFontMemResourceEx()
。我不知道有什么方法可以优先使用内存字体而不是其他已安装的字体。系统中只有一个字体表,CreateFont(Indirect)()
会加载最适合您指定特征的字体。如果另一个字体比您的内存字体更匹配,那么就使用它吧。 - Remy LebeauAddFontMemResourceEx
之前,您可以在内存中动态更改字体的面名。您需要复制资源数据才能进行写入。OpenType规范。 - zett42