利用GetBounds函数准确测量包含汉字的字符串长度

时间:2023-01-07 18:47:49

  说道测量字符串长度,我最早想到的是利用MeasureString函数,但经过尝试发现,对于不含汉字的字符串,它确实能够准确计算出,但对于包含汉字的字符串,往往不起作用!因此,通过各方位的baidu结果发现,可以利用计算路径边界的方法,也就是使用GetBounds函数(这里要感谢CSDN中的一个回复,是他帮助了我解决这个问题),具体代码如下:

 1 SIZE ReBateTipWindow::GetTextBounds(UString szText)
 2 {
 3     GraphicsPath path;
 4 
 5     FontFamily fontFamily(L"Times New Roman");
 6     Gdiplus::Font font(&fontFamily, 13, FontStyleRegular, UnitPixel);
 7     StringFormat stringFormat;
 8     stringFormat.SetTrimming( StringTrimmingCharacter);
 9     stringFormat.SetFormatFlags(StringFormatFlagsNoWrap );
10 
11     path.AddString(szText,-1,&fontFamily,font.GetStyle(),font.GetSize(),PointF(0,0),&stringFormat);
12     RectF rcBound;
13     path.GetBounds(&rcBound);
14 
15     SIZE size;
16     size.cx = (long)rcBound.Width+4;    
17     size.cy = (long)rcBound.Height;
18 
19     return size;
20 }