如何在ClearType打开时获取真实文本尺寸?

时间:2009-08-11 12:00:59

标签: windows winapi cleartype

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

我按照以下步骤进行:

  • 选择字体(GetStockObject(DEFAULT_GUI_FONT)),刷,其他东西进入设备上下文
  • 调用GetTextExtentPoint32()来计算文本的大小
  • 现在有文本起点我可以计算预期的文本矩形并存储它
  • 为具有相同起点和相同文本的相同设备上下文调用TextOut()

然后恢复商店矩形的位图。

当ClearType抗锯齿功能关闭时,它可以正常工作。但是,GetTextExtentPoint32()返回的大小上的ClearType略小于调用TextOut()时文本实际占用的大小。因此,当我稍后恢复原始位图时,文本的一些小条纹仍然存在并且我有文物。

如果不禁用ClearType,有没有解决方法?

1 个答案:

答案 0 :(得分:2)

您还可以尝试使用DT_CALCRECT DrawText来计算字符串大小。也许它效果更好。

然后你可以在一个矩形内写一个带有DrawText的字符串,其大小等于你用DT_CALCRECT得到的那个,它将剪切文本,以防它有点大。