代码之家  ›  专栏  ›  技术社区  ›  sharptooth

当ClearType处于启用状态时,如何获取真实文本维度?

  •  4
  • sharptooth  · 技术社区  · 15 年前

    我有一个Win32 GUI应用程序,它大量使用GDI。它需要在指定坐标的位图上绘制文本,然后将其删除并替换为原始位图。

    我的发言如下:

    • 在设备上下文中选择字体(GetStockObject(默认\u GUI\u字体))、画笔和其他内容
    • 调用GetTextExtentPoint32()计算文本的大小
    • 现在有了文本起点,我可以计算出预期的文本矩形并存储它

    然后恢复存储矩形的位图。

    当ClearType抗锯齿处于禁用状态时,它可以正常工作。但是,如果启用ClearType,则GetTextExtentPoint32()返回的大小略小于调用TextOut()时文本实际占用的大小。因此,当我稍后恢复原始位图时,文本的一些小条纹仍保留在原来的位置,并且出现了瑕疵。

    在不禁用ClearType的情况下,是否有任何解决方法?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Razvi    15 年前

    你也可以试试 DrawText 使用DT_CALCRECT计算字符串大小。也许效果更好。

    此外,您还可以在一个矩形内使用DrawText编写字符串,该矩形的大小等于您使用DT_CALCRECT获得的大小,如果文本稍大,它将剪裁文本。