PRB: Printer Font too Small with ChooseFont() Common Dialog

Last reviewed: November 2, 1995
Article ID: Q89544
The information in this article applies to:
  • Microsoft Windows Software Development Kit (SDK) versions 3.1
  • Microsoft Win32 Application Programming Interface (API) included with:

        - Microsoft Windows NT versions 3.5 and 3.51
        - Microsoft Windows 95 version 4.0
    

SYMPTOMS

In an application for the Microsoft Windows graphical environment, the user selects a printer font through the ChooseFont() common dialog box function. When the application calls the CreateFontIndirect() to create the selected font, even though the style and face name are correct, the point size is much too small.

CAUSE

The LOGFONT structure returned to the application is based on screen metrics--even when the user selects a printer font. Because the resolution (dots per inch) on a printer is generally much greater than that of the screen, the resulting printer font is smaller than desired.

RESOLUTION

Modify the lfHeight member of the LOGFONT data structure according to the printer metrics.

MORE INFORMATION

The following code demonstrates how to modify the lfHeight member. The lpcf variable contains a pointer to the CHOOSEFONT data structure. The hDC member of the CHOOSEFONT data structure is a handle to the printer device context.

   if (ChooseFont(lpcf))
   {
      if (lpcf->nFontType & PRINTER_FONT)
      {
         iLogPixelsy = GetDeviceCaps(lpcf->hDC, LOGPIXELSY);
         lpcf->lpLogFont->lfHeight =
             MulDiv(-iLogPixelsy, (lpcf->iPointSize / 10), 72);
         hPrinterFont =
             CreateFontIndirect((LPLOGFONT)(lpcf->lpLogFont));
      }
      else
      {
         // Create screen font
      }
   }
   else
   {
      // Process common dialog box error
   }


Additional reference words: 3.10 3.50 3.51 4.00 95
KBCategory: kbui kbprb kbcode
KBSubcategory: UsrCmnDlg


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: November 2, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.