调用Graphics.MeasureString()时会发生什么
本文关键字:什么 Graphics MeasureString 调用 | 更新日期: 2023-09-27 18:21:16
我正在尝试使用图形对象的MeasureString()方法来测量字符串的像素宽度。
我正在使用CreateGraphics()创建一个新的图形对象,并用它来调用MeasureString()。一旦完成,我就调用dispose()。
我的问题是,调用MeasureString()是否真的会导致渲染。不过,我没有使用任何绘图方法(例如DrawString等)。
-开发
public SizeF MeasureString(String text, Font font, SizeF layoutArea, StringFormat stringFormat)
{
if (text == null || text.Length == 0)
{
return new SizeF(0, 0);
}
if (font == null)
{
throw new ArgumentNullException("font");
}
GPRECTF grfLayout = new GPRECTF(0, 0, layoutArea.Width, layoutArea.Height);
GPRECTF grfboundingBox = new GPRECTF();
int a, b;
int status = SafeNativeMethods.Gdip.GdipMeasureString(new HandleRef(this, this.NativeGraphics), text, text.Length, new HandleRef(font, font.NativeFont),
ref grfLayout,
new HandleRef(stringFormat, (stringFormat == null) ? IntPtr.Zero : stringFormat.nativeFormat),
ref grfboundingBox, out a, out b);
if (status != SafeNativeMethods.Gdip.Ok)
{
throw SafeNativeMethods.Gdip.StatusException(status);
}
return grfboundingBox.SizeF;
}
因此,不会发生渲染。甚至文件上也这么说:
使用指定字体绘制时测量指定字符串。
正如方法名称所示,它不是。