INF: Changing the Font Used by Dialog Controls in Windows

ID Number: Q74737

3.00

WINDOWS

Summary:

In Windows 3.0, there are two ways to specify the font used by dialog

controls:

1. The FONT statement can be used in the dialog template to specify

the font used by ALL the controls in the dialog box.

-or-

2. The WM_SETFONT message can be sent to one or more dialog controls

during the processing of the WM_INITDIALOG message.

If a font is specified in the dialog template, the controls will use a

bold version of that font. The following code demonstrates how to

change the font used by dialog box controls to a nonbold font using

WM_SETFONT. The font should be deleted with DeleteObject() when the

dialog box is closed.

HWND hDlg;

HFONT hDlgFont;

LOGFONT lFont;

case WM_INITDIALOG:

/* Get dialog font and create non-bold version */

hDlgFont = NULL;

if ((hDlgFont = (HFONT)SendMessage(hDlg, WM_GETFONT, 0, 0L))

!= NULL)

{

if (GetObject(hDlgFont, sizeof(LOGFONT), (LPSTR)&lFont)

!= NULL)

{

lFont.lfWeight = FW_NORMAL;

if ((hDlgFont = CreateFontIndirect(&lFont)) != NULL)

{

SendDlgItemMessage(hDlg, CTR1, WM_SETFONT, hDlgFont, 0L);

// Send WM_SETFONT message to desired controls

}

}

}

else // user did not specify a font in the dialog template

{ // must simulate system font

lFont.lfHeight = 13;

lFont.lfWidth = 0;

lFont.lfEscapement = 0;

lFont.lfOrientation = 0;

lFont.lfWeight = 200; // non-bold font weight

lFont.lfItalic = 0;

lFont.lfUnderline = 0;

lFont.lfStrikeOut = 0;

lFont.lfCharSet = ANSI_CHARSET;

lFont.lfOutPrecision = OUT_DEFAULT_PRECIS;

lFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;

lFont.lfQuality = DEFAULT_QUALITY;

lFont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;

lFont.lfFaceName = (LPSTR)NULL;

hDlgFont = CreateFontIndirect(&lFont);

SendDlgItemMessage(hDlg, CTR1, WM_SETFONT, hDlgFont,

(DWORD)TRUE);

// Send WM_SETFONT message to desired controls

}

return TRUE;

break;