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