Winapi 加载精确字体win32

Winapi 加载精确字体win32,winapi,fonts,Winapi,Fonts,如何强制Win32 GDI字体映射器仅加载字体名称完全匹配的字体?我正在加载特定的字体,没有可行的替代品。任何替换都是不正确的。我希望CreateFont或CreateFontIndirect实际失败。或者,可能是其他一些Win32接口提供了更多的控制。即使我从文件中加载字体资源,它仍将尝试替换。而且,似乎没有办法从资源中获取字体名称。首先,部分问题是我的,因为这是过去某个时候转换为64位Unicode的旧32位ANSI代码。因此,指定字体名称的例程只复制了名称的一半,但nul终止符是正确的,将

如何强制Win32 GDI字体映射器仅加载字体名称完全匹配的字体?我正在加载特定的字体,没有可行的替代品。任何替换都是不正确的。我希望CreateFont或CreateFontIndirect实际失败。或者,可能是其他一些Win32接口提供了更多的控制。即使我从文件中加载字体资源,它仍将尝试替换。而且,似乎没有办法从资源中获取字体名称。

首先,部分问题是我的,因为这是过去某个时候转换为64位Unicode的旧32位ANSI代码。因此,指定字体名称的例程只复制了名称的一半,但nul终止符是正确的,将字体名称的一半作为垃圾。解决了这个问题,解决了很多问题

其次,GetTextMetrics函数不适用于作为资源安装的字体,因此该函数不可用。此外,GetFontData仅适用于True Type字体,因此也不可用。所有感兴趣的字体都是Unicode,但并非所有字体都是True Type。但是,GetTextFace函数确实起作用。此外,即使从字体枚举返回扩展字体信息,设置完整字体名称也是毫无意义的,因为它实际上不在LOGFONT中

在检查LOGFONT属性以确定最重要的属性之后,我决定使用面名称、ANSI字符集,并将字体系列设置为“不在乎”。权重、斜体、下划线和删除属性在必要时显然是伪造的。其余属性的默认值似乎可以接受,通常不需要


加载字体后,我调用GetTextFace名称并将其与请求的字体进行比较。这似乎很有效。

首先,部分问题是我的,因为这是过去某个时候转换为64位Unicode的旧32位ANSI代码。因此,指定字体名称的例程只复制了名称的一半,但nul终止符是正确的,将字体名称的一半作为垃圾。解决了这个问题,解决了很多问题

其次,GetTextMetrics函数不适用于作为资源安装的字体,因此该函数不可用。此外,GetFontData仅适用于True Type字体,因此也不可用。所有感兴趣的字体都是Unicode,但并非所有字体都是True Type。但是,GetTextFace函数确实起作用。此外,即使从字体枚举返回扩展字体信息,设置完整字体名称也是毫无意义的,因为它实际上不在LOGFONT中

在检查LOGFONT属性以确定最重要的属性之后,我决定使用面名称、ANSI字符集,并将字体系列设置为“不在乎”。权重、斜体、下划线和删除属性在必要时显然是伪造的。其余属性的默认值似乎可以接受,通常不需要


加载字体后,我调用GetTextFace名称并将其与请求的字体进行比较。这似乎工作得很好。

我不知道是否有任何方法可以控制GDI的字体映射器,尽管您可能可以通过首先使用特定字体来模拟所需的行为。我认为GDI的设计假设是,必须始终在设备上下文中选择某些字体。首先列举并查找特定字体的建议是有意义的。您还可以使用来检查实际选择到DC中的字体的“名称”表,以确认它是您想要的。到目前为止,使用GetFontData是最好的方法——但只有在我知道字体名称的情况下。从字体文件加载字体资源并没有提供这些信息。为了强制GDI映射程序只选择所请求的字体,获得最佳的LOGFONT选项也很重要。我创建了其中一种字体,但我无法准确预测它想要什么。例如,charset选项。这与字体没有任何实际关系。我猜默认的ANSI_字符集是最好的选择。所有这些字体都是Unicode字体,但没有匹配的字符集选项。我不知道是否有任何方法可以控制GDI的字体映射器,虽然您可能会通过首先使用查找特定字体来模拟所需的行为。我认为GDI中的设计假设是,在设备上下文中必须始终选择某些字体。首先列举并查找特定字体的建议是有意义的。您还可以使用来检查实际选择到DC中的字体的“名称”表,以确认它是您想要的。到目前为止,使用GetFontData是最好的方法——但只有在我知道字体名称的情况下。从字体文件加载字体资源并没有提供这些信息。为了强制GDI映射程序只选择所请求的字体,获得最佳的LOGFONT选项也很重要。我创建了其中一种字体,但我无法准确预测它想要什么。例如,charset选项。这与字体没有任何实际关系。我猜默认的ANSI_字符集是最好的选择。所有这些字体都是Unicode字体,但没有匹配的字符集选项。嗨,@Michael,你也可以自由选择嗨,@Michael,你也可以自由选择