[DllImport("gdi32.dll")]
static extern bool GetTextExtentPoint32(IntPtr hdc, string lpString,
int cbString, out SIZE lpSize);
None.
None.
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);
// 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;
}
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)