调用Graphics.MeasureString()时会发生什么

本文关键字:什么 Graphics MeasureString 调用 | 更新日期: 2023-09-27 18:21:16

我正在尝试使用图形对象的MeasureString()方法来测量字符串的像素宽度。

我正在使用CreateGraphics()创建一个新的图形对象,并用它来调用MeasureString()。一旦完成,我就调用dispose()。

我的问题是,调用MeasureString()是否真的会导致渲染。不过,我没有使用任何绘图方法(例如DrawString等)。

-开发

调用Graphics.MeasureString()时会发生什么

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;
}

因此,不会发生渲染。甚至文件上也这么说:

使用指定字体绘制时测量指定字符串。

正如方法名称所示,它不是。