函数CreateFont()的lfHeight函数.通常人们习惯于用点作为大小的单位,比如Size 10,Size 12等等.但是在处理字体时,函数CreateFont()并不接受点作为大小的单位.它需要的逻辑单元.逻辑单元用于你的显示器和你的打印机是不同的.
这种情况存在的原因就是因为不同设备的分辩率相差很大...打印机可以轻松地显示每英寸600至1200像素,而对于显示器能得到每英寸200像素的分辩率就很幸运了...假如你在打印机上用的是和显示器同样大小的字体,很可能你看不到单个单个的字符.
我们所要做的就是将以点为大小单位的字体转变成设备所需要的恰当的逻辑大小.因此我们要获取显示器的设备环境句柄HDC,然后用函数GetDeviceCaps()获取每英寸的逻辑像素的数值.然后再根据MSDN中告诉我们的,将这个数值与12相乘再除以72,就将字体大小为12个点转换成了CreateFont()函数所需要的正确的逻辑大小.至于乘以12除以72就可以用函数MulDiv().得到的这个逻辑大小值我们将它存储在lfHeight,再将它作为第一个参数传送给CreateFont()
nHeight 字体高度(逻辑单位)等于零为缺省高度,否则取绝对值并和可用的字体高度进行匹配
lfHeight 这是以逻辑单位表示的希望的字元高度。您可以将lfHeight设定0,以使用内定大小,或者根据栏位代表的含义将其设定为正数或负数。如果将lfHeight设定为正数,就表示您希望该值表示含有内部间隔(不是外部间隔)的高度。实际上,所要求的字体行距为lfHeight。如果将lfHeight设定为负值,则Windows会将其绝对值作为与点值一致的字体高度。这是一个很重要的区别:如果想要特定点值的字体,可将点值转换为逻辑单位,并将lfHeight栏位设定为该值的负数。如果lfHeight是正值,则TEXTMETRIC结构的tmHeight栏位近似为该值(有时有微小的偏差,可能由於舍入误差所引起)。如果lfHeight是负值,则它粗略地与不包括tmInternalLeading栏位的TEXTMETRIC结构的tmHeight栏位相匹配
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。