最近做的一个绘图软件,写字是最基本的功能,但是发现用户把字体设置为斜体时,选中文字后,文字会超出选中时的高亮外边框,我是采用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;