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

时间:2014-09-08 16:08:39

标签: c# winforms

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

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

我的问题是,调用MeasureString()是否实际导致渲染发生。我没有使用任何绘图方法(例如DrawString等)。

-DEV

2 个答案:

答案 0 :(得分:2)

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

所以不,没有渲染。即使是documentation也这么说:

  

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

答案 1 :(得分:1)

正如方法名称所示,它没有。