我在创建Font的时候遇到了麻烦,问题是这样的:
要求给出字号(文字大小)创建字体,然后描画,比如,给出一个大小(12),然后创建字体,描画。
LOGFONT中,规定字体大小有两个成员lfHeight 、lfWidth ;
我将lfWidth设为0,用lfHeight来控制字体的大小,但是这个lfHeight的含义我不太明确,他代表的是象素值,还是Point值呢,我必须指定一个很大的值才能描画出文字,请了解的人指点一下lfHeight在lfWidth设为了0时的含义,谢谢!(注:MSDN我看过了,还是不明白,请大家最好说说自己的看法,不要用Copy过来的东西,谢谢)

解决方案 »

  1.   

    nHeight
    指定所要求字体的字符单元的高度或字符所期望的高度(用逻辑单位)。
    (字符的高度值是字符单元的高度值减去内部的行间插入的空行值。)如
    果该值大于零,则字体映射程序将它与可用的字符单元的高度相匹配;如
    果它为零,则字体映射程序在寻找一个匹配值时,使用一个缺省的高度值;
    如果它小于零,则字体映射程序将它与可用的字符高度相匹配。
      

  2.   

    创建FONT一般都不是很精确。
      

  3.   

    怎么不用CFont类来创建字体?
      

  4.   

    nWidth
    指定了字符的平均宽度(比例间隔字体的字符宽度不一)。也可以设置为0,此时映像机制会自动根据所设的高度选择一个恰当的宽度做默认值
      

  5.   

    Windows程序设计中这样说明:lfHeight这是以逻辑单位表示的希望的字符高度。您可以将lfHeight设定0,以使用内定大小,或者根据字段代表的含义将其设定为正数或负数。如果将lfHeight设定为正数,就表示您希望该值表示含有内部间隔(不是外部间隔)的高度。实际上,所要求的字体行距为lfHeight。如果将lfHeight设定为负值,则Windows会将其绝对值作为与点值一致的字体高度。这是一个很重要的区别:如果想要特定点值的字体,可将点值转换为逻辑单位,并将lfHeight字段设定为该值的负数。如果lfHeight是正值,则TEXTMETRIC结构的tmHeight字段近似为该值(有时有微小的偏差,可能由于舍入误差所引起)。如果lfHeight是负值,则它粗略地与不包括tmInternalLeading字段的TEXTMETRIC结构的tmHeight字段相匹配。
      

  6.   

    对于字体大小的控制都是用lfHeight来控制,而lfWidth一般不用来控制字体大小。若两者都取0则取系统的缺省值。
      

  7.   

    GetTextExtentPoint32,如果字符串中没有tab字符则可以用这个函数取得字符串的宽度和高度
    GetTabbedTextExtent,如果字符串中有tab字符可以用这个函数取得字符串的宽宽和高度