windows - 如何找到我的 CreateFont 调用实际使用的字体?

标签 windows fonts gdi

在 Windows 中,CreateFontIndirect()如果未请求所请求的字体,调用可以静默替换兼容的字体。 GetObject()调用不反射(reflect)此替换;它返回传入的相同 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?

如果您在目标 DC 中选择 HFONT,则可以向 DC 询问有关实际选择为与 LOGFONT 最匹配的字体的信息。

这基本上告诉您实际创建的是什么字体。

旁白:

当做打印预览之类的事情时,你可以从一个 LOGFONT 开始,选择它到打印机 DC(或 IC)中,抓取实际字体的细节(打印机经常替换字体),然后创建一个新的 LOGFONT,它更代表实际字体。将其选择到屏幕 DC 中,并通过适当的大小转换 - 与用户实际获得的内容非常匹配。

关于windows - 如何找到我的 CreateFont 调用实际使用的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154858/

相关文章:

c# - 如何将 JSON 数据类型转换为匹配的 C# 类型

ruby-on-rails - Rails 4.1 - ActionController::RoutingError(没有路由匹配 [GET] "/fonts/....ttf") - @font-face 问题

javascript - 如何生成自定义 .otf 字体子集文件?

c++ - 如何在 Windows GDI 中旋转位图?

c - 在 Windows api 中的自定义按钮上绘制文本

c - 原始/直接访问 BITMAPINFO (HBITMAP) 中的像素数据

java - 在windows中监听 "folder opening"事件(java)

c++ - Windows:更改 Exe 的 DLL 搜索顺序

c++ - 更改已编译/压缩 EXE 的标题

Android TextView 与 WebView 字体渲染