GetTextMetrics (gdi32)
Last changed: Szymon Katra-95.49.0.3

.
Summary

C# Signature:

[DllImport("gdi32.dll", CharSet = CharSet.Unicode)]
static extern bool GetTextMetrics(IntPtr hdc, out TEXTMETRIC lptm);

User-Defined Types:

TEXTMETRIC

Notes:

It's very important to use the Charset.Unicode attribute or you will get a runtime exception.

Tips & Tricks:

Please add some!

Sample Code:

public static TEXTMETRIC GetTextMetrics(Graphics graphics, Font font)
{
   IntPtr hDC = graphics.GetHdc();
   TEXTMETRIC textMetric;
   IntPtr hFont = font.ToHfont();
   try
   {
     IntPtr hFontPreviouse = SelectObject(hDC, hFont);
     bool result = GetTextMetrics(hDC, out textMetric);
     SelectObject(hDC, hFontPreviouse);
   }
   finally
   {  
     DeleteObject(hFont);
     graphics.ReleaseHdc(hDC);
   }
   return textMetric;
}

[DllImport("Gdi32.dll", CharSet=CharSet.Unicode)]
static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);

[DllImport("Gdi32.dll", CharSet=CharSet.Unicode)]
static extern bool GetTextMetrics(IntPtr hdc, out TEXTMETRIC lptm);

[DllImport("Gdi32.dll", CharSet=CharSet.Unicode)]
static extern bool DeleteObject(IntPtr hdc);

[StructLayout(LayoutKind.Sequential)]
internal struct TEXTMETRIC
{
   public int tmHeight;
   public int tmAscent;
   public int tmDescent;
   public int tmInternalLeading;
   public int tmExternalLeading;
   public int tmAveCharWidth;
   public int tmMaxCharWidth;
   public int tmWeight;
   public int tmOverhang;
   public int tmDigitizedAspectX;
   public int tmDigitizedAspectY;
   public char tmFirstChar;
   public char tmLastChar;
   public char tmDefaultChar;
   public char tmBreakChar;
   public byte tmItalic;
   public byte tmUnderlined;
   public byte tmStruckOut;
   public byte tmPitchAndFamily;
   public byte tmCharSet;
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation