tiger54910

导航

 

函数GetTextMetrics可以获取一个字体文本度量并将它放入一个类型为TEXTMETRIC的数据结构中,该结构如下所示:

typedef struct tagTEXTMETRIC { // tm 
    LONG tmHeight;                  //
字符高度
    LONG tmAscent;                  //
字符上部高度(基线以上)
    LONG tmDescent;                 //
字符下部高度(基线以下)
    LONG tmInternalLeading;         //
tmHeight定义的字符高度的顶部空间数目
    LONG tmExternalLeading;         //
加在两行之间的空间数目
    LONG tmAveCharWidth;            //
平均字符宽度
    LONG tmMaxCharWidth;            //
最宽字符的宽度
    LONG tmWeight;                  //
字体的粗细轻重程度
    LONG tmOverhang;                //
加入某些拼接字体上的附加高度
    LONG tmDigitizedAspectX;        //
字体设计所针对的设备水平方向分辨率96dpi
    LONG tmDigitizedAspectY;        //
字体设计所针对的设备垂直方向分辨率96dpi
    BCHAR tmFirstChar;              //
为字体定义的第一个字符
    BCHAR tmLastChar;               //
为字体定义的最后一个字符
    BCHAR tmDefaultChar;            //
字体中所没有字符的替代字符
    BCHAR tmBreakChar;              //
用于拆字的字符
    BYTE tmItalic;                  //
字体为斜体时非零
    BYTE tmUnderlined;              //
字体为下划线时非零
    BYTE tmStruckOut;               //
字体被删去时非零
    BYTE tmPitchAndFamily;          //
字体间距(4)和族(4)
    BYTE tmCharSet;                 //
字体的字符集
} TEXTMETRIC;

计算CRicheditctrl控件中的字符实际所占区域方法:

1.         计算每一行的单倍行高:行高lineHeight

2.         计算每一行的最大字号的字符高度;charHeight=字号*96/72px 字符格式字号=yHeight/20; 对于MM_TEXT映射方式,可以用下面的公式为一种指定了点大小的字体确定高度:    nHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY),72)

4.         计算每一行的基线位置;baseLine =charHeight*( tmDescent)/( tmHeight)+( lineHeight- charHeight)/2。 基线位置由该行字体高度最大字体来确定。

    5.   计算每一行的字符所占区域的左上角坐标getCharPos(char) 字符的位置为基线处于处于该字符字体高度的( tmDescent)/( tmHeight)的位置处。至此,可以精确确定字符的高度了。

     具体计算,就相当容易了,在此不再赘述。

 

posted on 2012-03-07 00:01  910积件系统  阅读(808)  评论(0)    收藏  举报