斜体字 字符串 宽度 如何计算准确

最近做的一个绘图软件,写字是最基本的功能,但是发现用户把字体设置为斜体时,选中文字后,文字会超出选中时的高亮外边框,我是采用GetTextExtent()函数得到当前字符串的高度和宽度,然后以此宽度和高度画的外边框。

好了,baidu,谷歌了一下,发现网上的方法和示例很麻烦,现总结如下:

1建立自己的字体

2把字体选入到当前用来绘图的dc中

3得到当前字符串的基本高度和宽度

4以当前字符串中的某一个文字为基础,计算出斜体所占长度

5得到最终斜体字符串所占的实际宽度

代码:

 

HDC hDeskTopDC = GetDC(GetDesktopWindow());//桌面窗口DC
CDC *pDC = CDC::FromHandle(hDeskTopDC);
int m_width,m_height;
SIZE size;
ABC abc1;
CFont m_font;
//创建斜体字体过程省略
CString aaa="TesT";
pDC->SelectObject(m_font);
GetTextExtentPoint32(hDeskTopDC,aaa.GetLength(), &size);
GetCharABCWidths(hDeskTopDC, 'f', 'f', &abc1);
m_width=size.cx+abc1.abcA-abc1.abcC;
m_height=size.cy;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值