BOOL GetTextMetrics(HDC hdc,LPTEXTMETRIC lptm);可以获得字体信息,并填入TEXTMETRIC结构:
typedef struct tagTEXTMETRIC
{
LONG tmHeight;
LONG tmAscent;
LONG tmDescent;
LONG tmInternalLeading;
LONG tmExternalLeading;
LONG tmAveCharWidth;
LONG tmMaxCharWidth;
... ... ...
... ... ...
} TEXTMETRIC;
这个结构中,重要的几个变量其意义见下图: tmInternalLeading 用于显示重音符号;基线上的高度为tmAscent;基线下的高度为tmDescent;tmHeight = tmAscent + tmDescent 被称为单元高度(cell height);tmHeight - tmInternalLeading 被称为字符高度(character height)。
tmExternalLeading是行间距,见下图:
CreateFont的第1个参数,如果为正,就是设置单元高度;如果为负,就是设置字符高度。
测试代码(MFC)如下:
CClientDC dc(this);
LOGFONT logFont;
TEXTMETRIC tm;
memset(&logFont,0,sizeof(logFont));
logFont.lfCharSet = DEFAULT_CHARSET;
logFont.lfHeight = -20; //修改该数值,查看 tm 变量
strcpy(logFont.lfFaceName,"Courier New");
dc.SelectObject(::CreateFontIndirect(&logFont));
dc.GetTextMetrics(&tm);
DeleteObject(dc.SelectStockObject(SYSTEM_FIXED_FONT)->m_hObject);