gettextextentpoint32 (gdi32)
Last changed: -212.152.161.92

.
Summary

C# Signature:

[DllImport("gdi32.dll")]
static extern bool GetTextExtentPoint32(IntPtr hdc, string lpString,
   int cbString, out SIZE lpSize);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

If you need to treat unicode text, you'll need to set the CharSet option to Unicode or Auto (which is default on WindowsNT)

[DllImport("gdi32.dll", CharSet=CharSet.Unicode)]

static extern bool GetTextExtentPoint32(IntPtr hdc, string lpString,

   int cbString, out SIZE lpSize);

Sample Code:

// the GDI class contains static "gdi32.dll" calls

public Size getExtent(string text, Graphics graphics, Font font)

{

    Size sz = Size.Empty;
    IntPtr hdc = graphics.GetHdc();
    IntPtr oldfnt = GDI.SelectObject(hdc, font.ToHfont());

    GDI.GetTextExtentPoint32(hdc, text, text.Length,out sz);

    // reset old font
    GDI.DeleteObject(GDI.SelectObject(hdc, oldfnt));
    graphics.ReleaseHdc(hdc);
    return sz;

}

Alternative Managed API:

If you are using GDI+ with a Graphics object you can make use of the following code sample:

    using System.Windows.Forms; // for TextRenderer

    Size size=TextRenderer.MeasureText(g, str, f, new Size(), TextFormatFlags.NoPadding);

Since .NET padding has been added to font's height and width. So you need to make use of the format flag TextFormatFlags.NoPadding to get the real size of the text.

Variables:

    g - is the Graphics object you want to draw on
    str - the string that should be measured
    f - the font you want to use
    new Size() - just a dummy parameter

For more information see

http://msdn.microsoft.com/de-de/library/system.windows.forms.textrenderer(VS.80).aspx

Good luck and have fun (Julian Taupe)

Documentation