INF: Accurately Showing on the Screen What Will Print

ID Number: Q75469

3.00 3.10

WINDOWS

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:

1. Retrieve a device context (DC) or an information context (IC) for

the printer.

2. Call the EnumFonts function to obtain a LOGFONT structure for the

chosen printer font. The nFontType parameter to the EnumFonts

callback function specifies if a given font is a device font.

3. Get a DC for the screen.

4. 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.

5. Call the CreateFontIndirect function with the LOGFONT structure.

6. Call the SelectObject function. GDI will select the appropriate

screen font to match the printer font.

7. 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:

1. Perform the seven steps above to retrieve an appropriate screen

font.

2. 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.

3. Allocate a block of memory and specify the spacing between

characters. Make sure that this information is in screen resolution

units.

4. Specify the address of the memory block as the lpDx parameter to

the ExtTextOut function. GDI will space the characters as listed

in the array.

Additional reference words: 3.00 3.10 3.x WYSIWYG PRINTER FONTS