【问题标题】:How does GDI function GetFontData know which font?GDI 函数 GetFontData 如何知道哪种字体?
【发布时间】:2013-10-10 09:28:14
【问题描述】:

我有一些旧代码要移植到 Metro。旧代码使用 GDI 函数 GetFontData 从标签被传递给它的表中获取字体数据。我打算用IDWriteFontFace::TryGetFontTable 替换它。为此,我必须创建一个IDWriteFontFace 对象,该对象需要与它所代表的字体相对应的字体文件的路径。但我不明白的是GetFontData 在哪里找出应该从其表中获取数据的字体文件?它是从传递给它的设备上下文中这样做的吗?

【问题讨论】:

    标签: winapi windows-store-apps gdi


    【解决方案1】:

    字体是当前在设备上下文中选择的字体。您可以使用对象类型为 OBJ_FONT 的 GetCurrentObject 来检索它。然后,您可以安全地将返回的 HGDIOBJ 转换为 HFONT。

    至于检索字体文件名,这并不容易。见that SO Question

    【讨论】:

    • 获取字体文件名实际上不是我的要求。但看起来知道这是我创建 IDWriteFontFace 对象的唯一方法。有没有办法在不知道字体文件路径/名称的情况下创建这个对象?
    • @user 引用blogs.msdn.com/b/text/archive/2009/04/15/… "因为物理字体封装了字体数据,所以您通过指定数据源来创建 IDWriteFontFace 对象:IDWriteFontFile 对象。"
    • 我想我找到了一种方法来做到这一点。如果你有字体对象,那么有一种方法可以创建 IDWriteFontFace 对象。这里是link
    【解决方案2】:

    在设备上下文中总是选择一些字体(我说总是因为有默认字体)。所以GetFontData 根据HDC hdc 参数返回该字体。

    正如 manuell 提到的,GetFontData 类似于 (HFONT)(GetCurrentObject(hdc, OBJ_FONT))

    【讨论】:

    • GetFontData 不“等同于”GetCurrentObjec,它只返回一个句柄。
    • 抱歉,我错了,我认为GetFontData 的工作方式略有不同。
    猜你喜欢
    • 2019-08-07
    • 2013-11-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2012-07-17
    • 2017-01-03
    相关资源
    最近更新 更多