将LogFont高度转换为以磅为单位的字体大小

时间:2010-05-31 14:27:37

标签: delphi fonts delphi-2007 font-size

我有一个LOGFONT结构。现在我要做的就是从LOGFONT高度获得相关的字体大小。

2 个答案:

答案 0 :(得分:11)

当映射模式为mm_Text时(通常是),当lfHeight字段为正时,它已经以点为单位给出了高度。当它为负数时,单位为像素。 MSDN for LogFont为您提供了在它们之间进行转换的公式:

lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

每英寸有72个点。 GetDeviceCaps告诉您给定设备上每英寸的像素数。反转公式以从点获取像素:

PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);

这里要认识到的重要一点是你需要一个设备上下文。字体大小不会独立于它们出现的媒体而存在。屏幕上字体的像素高度将与打印机上字体的像素高度不同。使用您计划绘制的任何画布的Handle属性。

答案 1 :(得分:1)

我发现这有点令人困惑。 以下是我学到的一些内容。 ;)

  1. 检查lfPitchAndFamily的两个低位,以确定字体类型。
  2. 对于固定间距字体,请使用GetTextMetricsTEXTMETRIC结构。
  3. 对于可变间距字体(真实类型等),请使用GetOutlineTextMetricsOUTLINETEXTMETRIC结构。确保结构正确对齐。而且,该结构是可变大小的。调用函数一次得到大小,分配空间,然后再次调用函数来填充结构。
  4. 从那里,您可以找到适当的上升,下降和其他与尺寸相关的信息。
  5. 请记住,它们是推荐值,并非所有显示例程都能正确使用它们。例如,我正在计算确定给定文本字符串的对话框静态控件所需高度的正确方法。 微软似乎没有遵循他们自己的文档。 ;) 并非文档完全清楚或完整。