我有一个LOGFONT结构。现在我要做的就是从LOGFONT高度获得相关的字体大小。
答案 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)
我发现这有点令人困惑。 以下是我学到的一些内容。 ;)
lfPitchAndFamily
的两个低位,以确定字体类型。GetTextMetrics
和TEXTMETRIC
结构。GetOutlineTextMetrics
和OUTLINETEXTMETRIC
结构。确保结构正确对齐。而且,该结构是可变大小的。调用函数一次得到大小,分配空间,然后再次调用函数来填充结构。请记住,它们是推荐值,并非所有显示例程都能正确使用它们。例如,我正在计算确定给定文本字符串的对话框静态控件所需高度的正确方法。 微软似乎没有遵循他们自己的文档。 ;) 并非文档完全清楚或完整。