加载准确的字体 win32
Load exact font win32
如何强制 Win32 GDI 字体映射器只加载字体名称完全匹配的字体?我正在加载没有可行替代品的特定字体。任何替换都是不正确的。我希望 CreateFont 或 CreateFontIndirect 实际上失败。或者,也许是其他一些提供更多控制的 Win32 接口。即使我从文件中加载字体资源,它仍然会尝试替换。而且,似乎没有办法从资源中获取字体名称。
首先,部分问题是我的,因为这是过去某个时候转换为 64 位 Unicode 的旧 32 位 ANSI 代码。所以指定字体名称的例程只复制了一半名称,但nul-terminator是正确的,留下一半字体名称作为垃圾。解决这个问题,对解决问题大有帮助。
其次,GetTextMetrics 函数不适用于作为资源安装的字体,因此该函数不可用。此外,GetFontData 仅适用于 True Type 字体,因此它也不可用。所有感兴趣的字体都是 Unicode,但并非所有都是 True Type。但是,GetTextFace 函数确实有效。此外,即使从字体枚举返回扩展字体信息,设置完整的字体名称也没有意义,因为它实际上不在 LOGFONT 中。
在检查了 LOGFONT 属性以确定最重要的属性之后,我确定了外观名称、ANSI 字符集并将字体系列设置为无关紧要。重量、斜体、下划线和删除线属性在必要时显然是捏造的。其余属性的默认值似乎可以接受,通常不需要。
加载字体后,我调用了 GetTextFace name 并将其与请求的字体进行比较。这似乎运作良好。
如何强制 Win32 GDI 字体映射器只加载字体名称完全匹配的字体?我正在加载没有可行替代品的特定字体。任何替换都是不正确的。我希望 CreateFont 或 CreateFontIndirect 实际上失败。或者,也许是其他一些提供更多控制的 Win32 接口。即使我从文件中加载字体资源,它仍然会尝试替换。而且,似乎没有办法从资源中获取字体名称。
首先,部分问题是我的,因为这是过去某个时候转换为 64 位 Unicode 的旧 32 位 ANSI 代码。所以指定字体名称的例程只复制了一半名称,但nul-terminator是正确的,留下一半字体名称作为垃圾。解决这个问题,对解决问题大有帮助。
其次,GetTextMetrics 函数不适用于作为资源安装的字体,因此该函数不可用。此外,GetFontData 仅适用于 True Type 字体,因此它也不可用。所有感兴趣的字体都是 Unicode,但并非所有都是 True Type。但是,GetTextFace 函数确实有效。此外,即使从字体枚举返回扩展字体信息,设置完整的字体名称也没有意义,因为它实际上不在 LOGFONT 中。
在检查了 LOGFONT 属性以确定最重要的属性之后,我确定了外观名称、ANSI 字符集并将字体系列设置为无关紧要。重量、斜体、下划线和删除线属性在必要时显然是捏造的。其余属性的默认值似乎可以接受,通常不需要。
加载字体后,我调用了 GetTextFace name 并将其与请求的字体进行比较。这似乎运作良好。