某些字体的字母宽度不一致,如何获得一个字符串的实际宽度?

xiangshenyang 2005-10-24 04:45:10
现在发现有些字体如"Times New Roman"的字符宽度不一致,字符‘a’比字符‘f’宽得多。郁闷,不知道怎么来获指定字符串的实际宽度。
...全文
866 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddmor 2005-10-24
  • 打赏
  • 举报
回复
TRUE Type类型的字体宽度是一致的比如宋体,可以用::GetCharABCWidths()来获得,非TRUE TYPE类型的字体需要用::GetCharWidth32来获得,比如:
ABC pBuf[26];
INT pBuf2[26];
pDC->GetCharABCWidths('a','z',pBuf);
pDC->GetCharWidth('a','z',pBuf2);
这样就可以获得字体具体的宽度了。
不过可以字符串的长度可以用goodboyws所说GetTextExtentPoint32来获得。
CDC中为GetTextExtent(),该函数功能强大,还可以取中文的长度。
如:
ABC pBuf[26];
INT pBuf2[26];
CSize size;
pDC->GetCharABCWidths('a','z',pBuf);
pDC->GetCharWidth('a','z',pBuf2);
size=pDC->GetTextExtent("中文");
在GDI+里边好像没有封装此类函数,所以你只好借助CDC来完成宽度估计啦。
呵呵,本人以前写过一个文本编辑器,当时遇到这个问题也很头疼。


thisisll 2005-10-24
  • 打赏
  • 举报
回复
原来有这种函数啊
害我写了一个
goodboyws 2005-10-24
  • 打赏
  • 举报
回复
用API
BOOL GetTextExtentPoint32(
HDC hdc, // handle to DC
LPCTSTR lpString, // text string
int cbString, // characters in string
LPSIZE lpSize // string size
);
xiangshenyang 2005-10-24
  • 打赏
  • 举报
回复
我用的是GDI+,该用什么函数
goodboyws 2005-10-24
  • 打赏
  • 举报
回复
错了,是CDC::GetTextExtent
goodboyws 2005-10-24
  • 打赏
  • 举报
回复
CDC::GetTextExtend
寻开心 2005-10-24
  • 打赏
  • 举报
回复
GetCharWidth32

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧