在
Windows中,如果未请求请求的字体,则
CreateFontIndirect()
呼叫可以静音替换兼容的字体.
GetObject()
电话没有反映这种替代;它返回相同的LOGFONT传入.我如何找到实际创建的字体?或者,如何强制Windows只返回确切的字体请求?
In Windows,the CreateFontIndirect() call can silently substitute compatible fonts if the requested font is not requested. The GetObject() call does not reflect this substitution; it returns the same LOGFONT passed in.
不是CreateFontIndirect正在进行替换.当字体被选择到DC时,会发生替换. CreateFontIndirect只是给你一个LOGFONT的内部副本的句柄.这就是为什么GetObject给你相同的LOGFONT.
How can I find what font was actually created?
如果您将HFONT选择到目标DC中,您可以向DC询问实际选择的字体与LOGFONT最匹配的信息.
>面部名称可用于GetTextFace.
>您可以使用GetTextMetrics获取指标.
>如果所选字体为TrueType或OpenType,则可以使用GetOutlineTextMetrics获取其他指标.
这实际上告诉你实际创建了什么字体.
在旁边:
在打印预览时,您可以从LOGFONT开始,将其选择到打印机DC(或IC)中,获取实际字体的详细信息(打印机通常替换字体),然后创建一个更具代表性的新LOGFONT实际字体选择到屏幕DC,和 – 适当的大小转换 – 做一个很好的匹配用户将实际获得.