GetTextMetrics (gdi32)
Last changed: Szymon Katra-


C# Signature:

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

User-Defined Types:



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();
     IntPtr hFontPreviouse = SelectObject(hDC, hFont);
     bool result = GetTextMetrics(hDC, out textMetric);
     SelectObject(hDC, hFontPreviouse);
   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);

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!