The information in this article applies to:
SUMMARY
Many applications have an option where the screen display is set to
closely correspond to the printed output. This article discusses some
of the issues involved in implementing this feature.
MORE INFORMATION
If a screen font is available that exactly matches (or at least very
closely corresponds to) the chosen printer font, then the process is
very straightforward and consists of seven steps:
- Retrieve a device context (DC) or an information context (IC) for
the printer.
- Call EnumFontFamilies() to obtain a LOGFONT structure for the chosen
printer font. The nFontType parameter to the EnumFontFamilies() callback
function specifies if a given font is a device font.
- Get a DC for the screen.
- Convert the lfHeight and lfWidth members of the LOGFONT structure
from printer resolution units to screen resolution units. If a
mapping mode other than MM_TEXT is used, round-off error may occur.
- Call CreateFontIndirect() with the LOGFONT structure.
- Call SelectObject(). GDI will select the appropriate screen font to
match the printer font.
- Release the printer device context or information context and the
screen device context.
If a screen font that corresponds to the selected printer font is not
available, the process is more difficult. It is possible to modify the
character placement on the screen to match the printer font to show
justification, line breaks, and page layout. However, visual
similarity between the printer fonts and screen fonts depends on a
number of factors, including the number and variety of screen fonts
available, the selected printer font, and how the printer driver
describes the font. For example, if the printer has a serifed Roman-
style font, one of the GDI serifed Roman-style fonts will appear to be
very similar to the printer font. However, if the printer has a
decorative Old English-style font, no corresponding screen font will
typically be available. The closest available match would not be very
similar.
To have a screen font that matches the character placement of a
printer font, do the following:
- Perform the seven steps above to retrieve an appropriate screen
font.
- Get the character width from the TEXTMETRIC structure returned by
the EnumFonts function in step 2 above. Use this information to
calculate the page position of each character to be printed in the
printer font.
- Allocate a block of memory and specify the spacing between
characters. Make sure that this information is in screen resolution
units.
- Specify the address of the memory block as the lpDx parameter to
ExtTextOut(). GDI will space the characters as listed in the array.
|