我有一个LOGFONT结构。现在我想要做的就是从LOGFONT高度获取相关字体大小。将LogFont高度转换为以磅为单位的字体大小
4
A
回答
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
我觉得这也有点混乱。 以下是我学到的一些东西。 ;)
- 检查
lfPitchAndFamily
的两个低位以确定字体类型。 - 对于固定间距字体,请使用
GetTextMetrics
和TEXTMETRIC
结构。 - 对于可变间距字体(真实类型等),请使用
GetOutlineTextMetrics
和OUTLINETEXTMETRIC
结构。确保你的结构正确对齐。此外,结构是可变大小的。调用一次函数来获得大小,分配空间,然后再次调用函数来填充结构。 - 从那里,你可以找到适当的上升,下降和其他尺寸相关的信息。
请记住,它们是推荐值,并非所有显示例程都能正确使用它们。例如,我正在计算确定给定字符串文本的对话框静态控制所需高度的正确方法。 似乎并没有Microsoft遵循他们自己的文档。 ;) 不是说文档是全部清楚或完整的,首先。
相关问题
- 1. ColdFusion - 将体重以磅为单位转换为磅和盎司
- 2. 如何将字体大小(以px为单位)转换为文档中使用的单位(mm)以获取svg
- 3. 固定大小像素字体的Emacs字体大小(以像素为单位)?
- 4. 将内容高度设置为精确的字体大小
- 5. 将div设置为高度100%的字体大小
- 6. 如何将符号GtkIconSize转换为以像素为单位的整数大小?
- 7. 以像素为单位的字体大小和分数
- 8. Matplotlib以轴为单位的字体大小
- 9. 以像素为单位的WebBrowser字体大小
- 10. C#将datetimeoffset转换为以毫秒为单位的字符串
- 11. 将小写字母转换为大写
- 12. 将小写字母转换为大写
- 13. 字体大小属性不是以像素为单位?
- 14. 使用jQuery检测字体大小(以像素为单位)
- 15. 测量字体大小以像素为单位
- 16. 如何将svg元素的高度/宽度大小转换为像素
- 17. 如何将px转换为%,就像我们将px转换为em以获取字体大小一样?
- 18. 以厘米为单位将高度转换为英寸,但无法获取小数点
- 19. D3字体大小转换
- 20. 用单位(100kb,32MB)将大小符号转换为Python中的字节数
- 21. C#将步幅/缓冲区/宽度/高度转换为位图
- 22. 将字节转换为位
- 23. 如何将宽度和高度(以像素为单位)转换为用于python库pyte的列?
- 24. 类型转换指针来改变其大小(以字节为单位)
- 25. 将jquery转换为均衡高度的小脚本中的mootools
- 26. 如何将字符串长度转换为像素单位?
- 27. 以秒为单位的音频大小
- 28. 以ls为单位的文件大小?
- 29. 将WPF宽度/高度转换为VB 6宽度/高度
- 30. Jquery字体大小调整为div高度?
>“当lfHeight字段为正值时” - 然后字体映射器为单元格高度提供匹配,即字符高度+内部引导。要获得点的大小,必须从(单元格)高度中减去内部前导,然后按照上述步骤操作。 – 2010-05-31 15:58:56
我认为我的第一条评论有点模糊,有点误导。如果说,模糊不会; “lfHeight”总是以像素为单位,唯一的区别是当它是完整的单元格高度,当它的绝对值是字符高度时。如果说有误导性;由于LOGFONT结构没有“内部领先”信息,所以无法通过正面高度计算点的大小。必须选择字体到DC然后使用GetTextMetrics,然后字符高度为tmHeight-tmInternalLeading。 – 2010-06-01 21:41:14