HOWTO: Change the Font Used by Dialog Controls in Windows

ID: Q74737


The information in this article applies to:
  • Microsoft Win32 Software Development Kit (SDK)
  • Microsoft Windows Software Development Kit (SDK) 3.1
  • Microsoft Windows 2000


SUMMARY

In Windows 3.x, there are two ways to specify the font used by dialog controls:

  • The FONT statement can be used in the dialog template to specify the font used by ALL the controls in the dialog box.


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

Sample Code


   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[0] = NULL;
          hDlgFont = CreateFontIndirect(&lFont);

          SendDlgItemMessage(hDlg, CTR1, WM_SETFONT, hDlgFont,
             (DWORD)TRUE);
          // Send WM_SETFONT message to desired controls
          }

      return TRUE;
      break; 

Additional query words:

Keywords : kbDlg kbNTOS kbWinOS2000 kbSDKWin32 kbGrpUser kbWinOS
Version : WINDOWS:3.1
Platform : WINDOWS
Issue type : kbhowto


Last Reviewed: January 28, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.