【发布时间】:2011-02-26 00:19:28
【问题描述】:
我有一个 LOGFONT 结构。现在我想做的就是从 LOGFONT 高度获取相关的字体大小。
【问题讨论】:
标签: delphi fonts delphi-2007 font-size
我有一个 LOGFONT 结构。现在我想做的就是从 LOGFONT 高度获取相关的字体大小。
【问题讨论】:
标签: delphi fonts delphi-2007 font-size
当映射模式为mm_Text(通常是这样),并且当lfHeight 字段为正时,它已经给出了以磅为单位的高度。当它是负数时,单位是像素。 MSDN for LogFont 为您提供了在它们之间转换的公式:
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
每英寸有 72 个点。 GetDeviceCaps 告诉您给定设备上每英寸的像素数。反转公式以从点获取像素:
PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);
这里要意识到的重要一点是您需要一个设备上下文。字体大小并不独立于它们出现的媒体。屏幕上字体的像素高度与打印机上字体的像素高度不同。使用您计划绘制到的任何画布的Handle 属性。
【讨论】:
我也觉得这有点令人困惑。 以下是我学到的一些东西。 ;)
lfPitchAndFamily 的两个低位以确定字体类型。GetTextMetrics 和TEXTMETRIC 结构。GetOutlineTextMetrics 和OUTLINETEXTMETRIC 结构。确保结构正确对齐。此外,该结构是可变大小的。调用一次函数以获取大小,分配空间,然后再次调用该函数以填充结构。请记住,它们是推荐值,并非所有显示例程都能正确使用它们。例如,我正在寻找一种正确的方法来确定给定文本字符串的对话框静态控件所需的高度。 微软似乎没有遵循他们自己的文档。 ;) 并不是说文档一开始就那么清楚或完整。
【讨论】: