VC字体接口SDK有点怪异

简介: VC字体接口SDK有点怪异

首先看看字的结构:


字体结构的Baseline/Leading/Ascent/Descent的图示_柳鲲鹏的博客-CSDN博客_ascent descent 字体


 由图中看到, 正常的接口应该是提供相应的访问功能。因为工作原因,了解了一下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       //字体名称
  );

 吾想指定的是字号,怎么要指定高度?这不科学啊。吾只知道字号,不知道高度,怎么办?


 有人说字号可以换算为高度,这个想法应该是错的。理由参考下文。


怪异3:实际高度要加上leading

 指定height=1000,结果是:ascent=859,descent=141,leading=141。


 这是怎么回事?吾试了一下JDK,指定字号1000,结果是:ascent=860, descent=141, leading=141。这样一算正好。这可能是接口的定义不同,倒是无所谓了。


 注意ascent,为什么会差一个像素?谁错了?简单分析了一下,可能是JDK算错了。理由就是ascent+leading != 1000。

目录
相关文章
|
1月前
|
JSON 前端开发 API
使用微信JS-SDK调用发票接口的完整开发指南
本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
75 2
|
5月前
|
API 开发工具
企业微信SDK接口API调用-触发推送企业微信微信好友
企业微信SDK接口API调用-触发推送企业微信微信好友
|
5月前
|
开发工具
抖音sdk接口,抖音上线下线
抖音sdk接口,抖音上线下线
|
5月前
|
开发工具
抖音sdk接口,抖音粉丝或好友收发消息
抖音sdk接口,抖音粉丝或好友收发消息
|
5月前
|
开发工具
抖音sdk接口,关注与取消关注抖音号
抖音sdk接口,关注与取消关注抖音号
|
5月前
|
开发工具
抖音sdk接口,同步抖音推荐的好友
抖音sdk接口,同步抖音推荐的好友
|
5月前
|
开发工具
抖音sdk接口,同步抖音聊天会话列表
抖音sdk接口,同步抖音聊天会话列表
|
5月前
|
开发工具
抖音sdk接口,同步抖音粉丝列表
抖音sdk接口,同步抖音粉丝列表
|
5月前
|
Java API 开发工具
企业微信api,企业微信sdk接口java调用源码
企业微信api,企业微信sdk接口java调用源码
|
5月前
|
API 开发工具
抖音sdk,抖音开发api接口
抖音sdk,抖音开发api接口