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

  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