VC字体接口SDK有点怪异
原创
©著作权归作者所有:来自51CTO博客作者柳鲲鹏泰山的原创作品,请联系作者获取转载授权,否则将追究法律责任
首先看看字的结构:
由图中看到, 正常的接口应该是提供相应的访问功能。因为工作原因,了解了一下VC字体的接口,觉得甚是奇怪。
font=CreateMyFont(L"宋体", fontSize);
SelectObject(hDC,font); //将创建的字体句柄选入设备环境
TEXTMETRIC tm;
GetTextMetrics(hDC, &tm);
有了字体,应该直接从字体中获取信息,为什么要经过HDC?
CreateFont
( height, //字体的高度
0, //由系统根据高宽比选取字体最佳宽度值
0, //文本的倾斜度为,表示水平
0, //字体的倾斜度为
FW_HEAVY,
0, //非斜体字
0, //无下划线
0, //无删除线
GB2312_CHARSET, //表示所用的字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS, //输出精度为默认精度
CLIP_DEFAULT_PRECIS, //剪裁精度为默认精度
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
fontName //字体名称
);
吾想指定的是字号,怎么要指定高度?这不科学啊。吾只知道字号,不知道高度,怎么办?
有人说字号可以换算为高度,这个想法应该是错的。理由参考下文。
指定height=1000,结果是:ascent=859,descent=141,leading=141。
这是怎么回事?吾试了一下JDK,指定字号1000,结果是:ascent=860, descent=141, leading=141。这样一算正好。这可能是接口的定义不同,倒是无所谓了。
注意ascent,为什么会差一个像素?谁错了?简单分析了一下,可能是JDK算错了。理由就是ascent+leading != 1000。