INF: Calculating Text Extents of Bold and Italic Text

ID Number: Q74298

3.00 3.10

WINDOWS

Summary:

The GetTextExtent function can be used to calculate the extent of a

string. The value returned may need to be adjusted, depending upon the

style of the font. When an italic or bold font is requested and none

are available, the graphics device interface (GDI) may simulate those

styles using an existing raster or vector font.

More Information:

GDI-simulated bold and italic fonts both include overhangs. The

overhang is specified in a TEXTMETRIC structure obtained by calling

the GetTextMetrics function. The proper method for calculating the

extent of a line of italic or bold text is shown below:

dwExtent = GetTextExtent(hDC, lpString, nCount);

GetTextMetrics(hDC, &tm);

xExtent = LOWORD(dwExtent) - tm.tmOverhang;

Listed below are examples of italic text alignment. If the next

character is not italic, the overhang should not be subtracted

from the extent returned from the GetTextExtent function. The

overhang needs to be subtracted only when the next character has the

same style.

GetTextExtent yields

this as the extent:

||

/ / \/

/ / / / / / / /| |

/---/ / / / / / / | |

/ / /---/ /---/ /---/ |---|

/ / / / / / / / | |

----- / / / / / / | |

^ /\ /\

Overhang || ||

Because the next Start the nonitalic H

character is italic, here because it does not

start the next slant and would partially

character within the overwrite the previous

overhang of the italic character.

current character

The overhang for bold characters synthesized by GDI is generally 1

because GDI synthesizes bold fonts by outputting the text twice,

offsetting the second output by one pixel, effectively increasing the

width of each character by one pixel. Calculating the extent of the

bold text is similar to the method for italic text. The

GetTextExtent function always returns the extent of the text plus 1

for bold text. Thus by subtracting the tmOverhang(1), the proper

extent is achieved.

|| ||

|| ||

||===||

|| ||

|| ||

---<= This line represents the "extra" overhang of 1.

/\

||

GetTextExtent yields

this as the extent of the

bold H.

Additional reference words: 3.00 3.10 3.x