GetTextMetrics和GetDeviceCaps函数

=============================================================

标题:GetTextMetricsGetDeviceCaps函数

摘要:

备注:

日期:2010.5.30

姓名:朱铭雷

=============================================================

       1GetTextMetrics函数能够获取字体的一些重要信息,当我们要输出文本时,这些参数就派上用场了。它将获取的全部信息都存储到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, //字体设计所针对的设备水平方向

  LONG tmDigitizedAspectY, //字体设计所针对的设备垂直方向

  BCHAR tmFirstChar; //为字体定义的第一个字符

  BCHAR tmLastChar; //为字体定义的最后一个字符

  BCHAR tmDefaultChar; //字体中所没有字符的替代字符

  BCHAR tmBreakChar; //用于拆字的字符

  BYTE tmItalic, //字体为斜体时非零

  BYTE tmUnderlined, //字体为下划线时非零

  BYTE tmStruckOut, //字体被删去时非零

  BYTE tmPitchAndFamily, //字体间距(4)和族(4)

  BYTE tmCharSet; //字体的字符集

} TEXTMETRIC;     

这其中最常用到的几个成员是:tmHeighttmInternalLeadingtmExternalLeading。下面是一个示意图:GetTextMetrics和GetDeviceCaps函数_第1张图片

当输出多行文本时,经常通过“tm.tmHeight + tm.tmExternalLeading”来计算出下一行文本的Y坐标。

另外可以通过GetTextExtent函数来获取某一行文本的宽度和高度,如:

       CSize sizeText;

    CString strText;

    strText.Format(_T("compute the width and height of a line of text");

    sizeText = pDC->GetTextExtent(strText);

    TRACE(_T("string width = %d, string height = %d/n"), sizeText.cx, sizeText.cy);

2GetDeviceCaps函数能够返回如下几个重要的显示参数,当然不仅仅是这些。

索引

描述

HORZSIZE

物理宽度(毫米)

VERTSIZE

物理高度(毫米)

HORZRES

象素宽度

VERTRES

象素高度

LOGPIXELSX

每逻辑英寸的水平点数

LOGPIXELSY

每逻辑英寸的垂直点数

如:

    TRACE(_T("LOGPIXELSX = %d, LOGPIXELSY = %d/n"),

        pDC->GetDeviceCaps(LOGPIXELSX),

        pDC->GetDeviceCaps(LOGPIXELSY));

 

    TRACE(_T("HORZSIZE = %d, VERTSIZE = %d/n"),

        pDC->GetDeviceCaps(HORZSIZE),

        pDC->GetDeviceCaps(VERTSIZE));

 

    TRACE(_T("HORZERS = %d, VERTRES = %d/n"),

        pDC->GetDeviceCaps(HORZRES),

    pDC->GetDeviceCaps(VERTRES));

在我电脑的输出结果:

LOGPIXELSX = 96, LOGPIXELSY = 96

HORZSIZE = 300, VERTSIZE = 187

HORZERS = 1280, VERTRES = 800

    我电脑的显示器分辨率是1280*800

你可能感兴趣的:(String,struct,存储,byte,2010)