using System.Runtime.InteropServices;
namespace Vanara.PInvoke
{
///
/// The TEXTMETRIC structure contains basic information about a physical font. All sizes are specified in logical units; that
/// is, they depend on the current mapping mode of the display context.
///
// https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/ns-wingdi-tagtextmetrica typedef struct tagTEXTMETRICA { LONG
// tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth;
// LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BYTE tmFirstChar; BYTE tmLastChar; BYTE
// tmDefaultChar; BYTE tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; }
// TEXTMETRICA, *PTEXTMETRICA, *NPTEXTMETRICA, *LPTEXTMETRICA;
[PInvokeData("wingdi.h", MSDNShortId = "0a46da58-5d0f-4db4-bba6-9e1b6c1f892c")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct TEXTMETRIC
{
///
/// The height (ascent + descent) of characters.
///
public int tmHeight;
///
/// The ascent (units above the base line) of characters.
///
public int tmAscent;
///
/// The descent (units below the base line) of characters.
///
public int tmDescent;
///
///
/// The amount of leading (space) inside the bounds set by the tmHeight member. Accent marks and other diacritical
/// characters may occur in this area. The designer may set this member to zero.
///
///
public int tmInternalLeading;
///
///
/// The amount of extra leading (space) that the application adds between rows. Since this area is outside the font, it contains
/// no marks and is not altered by text output calls in either OPAQUE or TRANSPARENT mode. The designer may set this member to zero.
///
///
public int tmExternalLeading;
///
///
/// The average width of characters in the font (generally defined as the width of the letter x ). This value does not include
/// the overhang required for bold or italic characters.
///
///
public int tmAveCharWidth;
///
/// The width of the widest character in the font.
///
public int tmMaxCharWidth;
///
/// The weight of the font.
///
public int tmWeight;
///
///
/// The extra width per string that may be added to some synthesized fonts. When synthesizing some attributes, such as bold or
/// italic, graphics device interface (GDI) or a device may have to add width to a string on both a per-character and per-string
/// basis. For example, GDI makes a string bold by expanding the spacing of each character and overstriking by an offset value;
/// it italicizes a font by shearing the string. In either case, there is an overhang past the basic string. For bold strings,
/// the overhang is the distance by which the overstrike is offset. For italic strings, the overhang is the amount the top of the
/// font is sheared past the bottom of the font.
///
///
/// The tmOverhang member enables the application to determine how much of the character width returned by a
/// GetTextExtentPoint32 function call on a single character is the actual character width and how much is the per-string extra
/// width. The actual width is the extent minus the overhang.
///
///
public int tmOverhang;
///
/// The horizontal aspect of the device for which the font was designed.
///
public int tmDigitizedAspectX;
///
///
/// The vertical aspect of the device for which the font was designed. The ratio of the tmDigitizedAspectX and
/// tmDigitizedAspectY members is the aspect ratio of the device for which the font was designed.
///
///
public int tmDigitizedAspectY;
///
/// The value of the first character defined in the font.
///
public char tmFirstChar;
///
/// The value of the last character defined in the font.
///
public char tmLastChar;
///
/// The value of the character to be substituted for characters not in the font.
///
public char tmDefaultChar;
///
/// The value of the character that will be used to define word breaks for text justification.
///
public char tmBreakChar;
///
/// Specifies an italic font if it is nonzero.
///
public byte tmItalic;
///
/// Specifies an underlined font if it is nonzero.
///
public byte tmUnderlined;
///
/// A strikeout font if it is nonzero.
///
public byte tmStruckOut;
///
/// Specifies information about the pitch, the technology, and the family of a physical font.
///
/// The four low-order bits of this member specify information about the pitch and the technology of the font. A constant is
/// defined for each of the four bits.
///
///
///
/// Constant
/// Meaning
///
/// -
/// TMPF_FIXED_PITCH
///
/// If this bit is set the font is a variable pitch font. If this bit is clear the font is a fixed pitch font. Note very
/// carefully that those meanings are the opposite of what the constant name implies.
///
///
/// -
/// TMPF_VECTOR
/// If this bit is set the font is a vector font.
///
/// -
/// TMPF_TRUETYPE
/// If this bit is set the font is a TrueType font.
///
/// -
/// TMPF_DEVICE
/// If this bit is set the font is a device font.
///
///
///
/// An application should carefully test for qualities encoded in these low-order bits, making no arbitrary assumptions. For
/// example, besides having their own bits set, TrueType and PostScript fonts set the TMPF_VECTOR bit. A monospace bitmap font
/// has all of these low-order bits clear; a proportional bitmap font sets the TMPF_FIXED_PITCH bit. A Postscript printer device
/// font sets the TMPF_DEVICE, TMPF_VECTOR, and TMPF_FIXED_PITCH bits.
///
///
/// The four high-order bits of tmPitchAndFamily designate the font's font family. An application can use the value 0xF0
/// and the bitwise AND operator to mask out the four low-order bits of tmPitchAndFamily, thus obtaining a value that can
/// be directly compared with font family names to find an identical match. For information about font families, see the
/// description of the LOGFONT structure.
///
///
public byte tmPitchAndFamily;
///
/// The character set of the font. The character set can be one of the following values.
///
/// -
/// ANSI_CHARSET
///
/// -
/// BALTIC_CHARSET
///
/// -
/// CHINESEBIG5_CHARSET
///
/// -
/// DEFAULT_CHARSET
///
/// -
/// EASTEUROPE_CHARSET
///
/// -
/// GB2312_CHARSET
///
/// -
/// GREEK_CHARSET
///
/// -
/// HANGUL_CHARSET
///
/// -
/// MAC_CHARSET
///
/// -
/// OEM_CHARSET
///
/// -
/// RUSSIAN_CHARSET
///
/// -
/// SHIFTJIS_CHARSET
///
/// -
/// SYMBOL_CHARSET
///
/// -
/// TURKISH_CHARSET
///
/// -
/// VIETNAMESE_CHARSET
///
///
/// Korean language edition of Windows:
///
/// -
/// JOHAB_CHARSET
///
///
/// Middle East language edition of Windows:
///
/// -
/// ARABIC_CHARSET
///
/// -
/// HEBREW_CHARSET
///
///
/// Thai language edition of Windows:
///
/// -
/// THAI_CHARSET
///
///
///
public CharacterSet tmCharSet;
}
}