Microsoft Knowledge Base Article
This article contents is Microsoft Copyrighted material.
©2005-©2007 Microsoft Corporation. All rights reserved.
Terms
of Use |
Trademarks
Article ID: 89544 - Last Review: December 1, 2007 - Revision: 1.3
PRB: Printer Font too Small with ChooseFont() Common Dialog
This article was previously published under Q89544
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.
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.
Modify the lfHeight member of the LOGFONT data structure according to the
printer metrics.
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
}
APPLIES TO
- Microsoft Platform Software Development Kit-January 2000 Edition
- Microsoft Windows Software Development Kit 3.1
- Microsoft Windows XP Professional x64 Edition
- Microsoft Windows XP Home Edition
- Microsoft Windows XP Professional
Community Feedback System
Very often, it takes hours to solve a problem. Very often, you've looked high
and low, and have tried a lot of solutions. When you finally found it, chances
are, it was because someone else helped you. Here's your chance to give back.
Use our community feedback tool to let others know what worked for you and what
didn't.
Please also understand that the community feedback system is not warranted to be
correct, it's simply a system that we've built to let people try and help each
other. If something in a feedback response doesn't make sense to you, or you're
not comfortable making changes that the feedback talks about (like registry
edits), please consult a professional.
Thank you for using kbAlertz.com Feedback System.
-- Scott Cate