typedef struct tagNEWTEXTMETRIC { /* ntm */
int tmHeight;
int tmAscent;
int tmDescent;
int tmInternalLeading;
int tmExternalLeading;
int tmAveCharWidth;
int tmMaxCharWidth;
int tmWeight;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmFirstChar;
BYTE tmLastChar;
BYTE tmDefaultChar;
BYTE tmBreakChar;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
int tmOverhang;
int tmDigitizedAspectX;
int tmDigitizedAspectY;
DWORD ntmFlags;
UINT ntmSizeEM;
UINT ntmCellHeight;
UINT ntmAvgWidth;
} NEWTEXTMETRIC;
The NEWTEXTMETRIC structure contains basic information about a physical font. The last four members of the NEWTEXTMETRIC structure are not included in the TEXTMETRIC structure; in all other respects, the structures are identical. The additional members are used for information about TrueType fonts.
tmHeight
Specifies the height of character cells. (The height is the sum of the tmAscent and tmDescent members.)
tmAscent
Specifies the ascent of character cells. (The ascent is the space between the base line and the top of the character cell.)
tmDescent
Specifies the descent of character cells. (The descent is the space between the bottom of the character cell and the base line.)
tmInternalLeading
Specifies the difference between the point size of a font and the physical size of the font. For TrueType fonts, this value is equal to tmHeight minus (s * ntmSizeEM), where s is the scaling factor for the TrueType font. For bitmap fonts, this value is used to determine the point size of a font; when an application specifies a negative value in the lfHeight member of the LOGFONT structure, the application is requesting a font whose height equals tmHeight minus tmInternalLeading.
tmExternalLeading
Specifies the amount of extra leading (space) that the application adds between rows. Since this area is outside the character cell, it contains no marks and will not be altered by text output calls in either opaque or transparent mode. The font designer sometimes sets this member to zero.
tmAveCharWidth
Specifies the average width of characters in the font. For ANSI_CHARSET fonts, this is a weighted average of the characters “a” through “z” and the space character. For other character sets, this value is an unweighted average of all characters in the font.
tmMaxCharWidth
Specifies the “B” spacing of the widest character in the font. For more information about “B” spacing, see the description of the ABC structure.
tmWeight
Specifies the weight of the font. This member can be one of the following values:
Constant | Value |
FW_DONTCARE | 0 |
FW_THIN | 100 |
FW_EXTRALIGHT | 200 |
FW_ULTRALIGHT | 200 |
FW_LIGHT | 300 |
FW_NORMAL | 400 |
FW_REGULAR | 400 |
FW_MEDIUM | 500 |
FW_SEMIBOLD | 600 |
FW_DEMIBOLD | 600 |
FW_BOLD | 700 |
FW_EXTRABOLD | 800 |
FW_ULTRABOLD | 800 |
FW_BLACK | 900 |
FW_HEAVY | 900 |
tmItalic
Specifies an italic font if it is nonzero.
tmUnderlined
Specifies an underlined font if it is nonzero.
tmStruckOut
Specifies a “struckout” font if it is nonzero.
tmFirstChar
Specifies the value of the first character defined in the font.
tmLastChar
Specifies the value of the last character defined in the font.
tmDefaultChar
Specifies the value of the character that will be substituted for characters not in the font.
tmBreakChar
Specifies the value of the character that will be used to define word breaks for text justification.
tmPitchAndFamily
Specifies the pitch and family of the selected font. The four low-order bits identify the type of font, as follows:
Value | Meaning |
TMPF_PITCH | Designates a fixed-pitch font. |
TMPF_VECTOR | Designates a vector or TrueType font. |
TMPF_TRUETYPE | Designates a TrueType font. |
TMPF_DEVICE | Designates a device font. |
Some fonts are identified by several of these bits—for example, the bits TMPF_PITCH, TMPF_VECTOR, and TMPF_TRUETYPE would be set for the monospace TrueType font, Courier New. The TMPF_DEVICE bit could be set for a TrueType font as well, because this bit is set for both downloaded and device-resident fonts.
When the TMPF_TRUETYPE bit is set, the font is usable on all output devices. For example, if a TrueType font existed on a printer but could not be used on the display, the TMPF_TRUETYPE bit would not be set for that font.
The four high-order bits specify the font family. The tmPitchAndFamily member can be combined with the hexadecimal value 0xF0 by using the bitwise AND operator and can then be compared with the font family names for an identical match. The following font families are defined:
Value | Meaning |
FF_DECORATIVE | Novelty fonts. Old English is an example. |
FF_DONTCARE | Don't care or don't know. |
FF_MODERN | Fonts with constant stroke width, with or without serifs. Pica, Elite, and Courier New are examples. |
FF_ROMAN | Fonts with variable stroke width and with serifs. Times New Roman and New Century Schoolbook are examples. |
FF_SCRIPT | Fonts designed to look like handwriting. Script and Cursive are examples. |
FF_SWISS | Fonts with variable stroke width and without serifs. MS Sans Serif is an example. |
tmCharSet
Specifies the character set of the font. The following values are defined:
Constant | Value |
ANSI_CHARSET | 0 |
DEFAULT_CHARSET | 1 |
SYMBOL_CHARSET | 2 |
SHIFTJIS_CHARSET | 128 |
OEM_CHARSET | 255 |
tmOverhang
Specifies the extra width that is added to some synthesized fonts. When synthesizing some attributes, such as bold or italic, graphics-device interface (GDI) or a device adds width to a string on both a per-character and per-string basis. For example, GDI makes a string bold by expanding the intracharacter spacing and overstriking by an offset value and italicizes a font by skewing the string. In either case, the string is wider after the attribute is synthesized. 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 skewed past the bottom of the font.
The tmOverhang member is zero for many italic and bold TrueType fonts because many TrueType fonts include italic and bold faces that are not synthesized. For example, the overhang for Courier New Italic is zero.
An application that uses raster fonts can use the overhang value to determine the spacing between words that have different attributes.
tmDigitizedAspectX
Specifies the horizontal aspect of the device for which the font was designed.
tmDigitizedAspectY
Specifies 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.
ntmFlags
Specifies some elements of the font style. This member can be one or more of the following values:
NTM_REGULAR NTM_BOLD NTM_ITALIC
The NTM_BOLD and NTM_ITALIC flags could be combined with the OR operator to specify a bold italic font.
ntmSizeEM
Specifies the size of the em square for the font, in the units for which the font was designed (notional units).
ntmCellHeight
Specifies the height of the font, in the units for which the font was designed (notional units). This value should be compared against the value of the ntmSizeEM member.
ntmAvgWidth
Specifies the average width of characters in the font, in the units for which the font was designed (notional units). This value should be compared against the value of the ntmSizeEM member.
The sizes in the NEWTEXTMETRIC structure are typically given in logical units; that is, they depend on the current mapping mode of the display context.