Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

212 lines
5.2 KiB

//+----------------------------------------------------------------------------
//
// File: font.cpp
//
// Module: CMUTIL.DLL
//
// Synopsis: Font handling utility routines provided by CMUTIL
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// Author: quintinb Created 04/11/99
//
//+----------------------------------------------------------------------------
//
// Moved these routines from cmutil\misc.cpp
//
#include "cmmaster.h"
//+---------------------------------------------------------------------------
//
// Function: EnumChildProc
//
// Synopsis: Callback function to manipulate enumerated child windows.
// Interprets lParam as a font and applies it to each child.
//
// Arguments: hwndChild - Handle of child control
// lParam - App defined data (font)
//
// Returns: TRUE
//
// Note: This function is never exposed to clients of CMUTIL
//
// History: 5/13/97 - a-nichb - Created
//
//----------------------------------------------------------------------------
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
HFONT hFont = (HFONT) lParam;
if (hFont)
{
SendMessageU(hwndChild, WM_SETFONT, (WPARAM) hFont, MAKELPARAM(TRUE, 0));
}
MYDBGTST(!hFont, (TEXT("EnumChildProc() - Invalid hFont - NULL lParam.")));
return TRUE;
}
//+---------------------------------------------------------------------------
//
// Function: MakeBold
//
// Synopsis: Bold the text in the given window (usually a control). The
// caller is responsbile for calling ReleaseBold to free the
// allocated font resources.
//
// Arguments: hwnd - Window handle of the page
// fSize - If height should be changed proportionately
//
// Returns: ERROR_SUCCESS if successful
// Otherwise error code
//
// History: 10/16/1996 VetriV Created
// 01/12/2000 Quintinb Commonized for Cmmon and Profwiz
//----------------------------------------------------------------------------
CMUTILAPI HRESULT MakeBold (HWND hwnd, BOOL fSize)
{
HRESULT hr = ERROR_SUCCESS;
HFONT hfont = NULL;
HFONT hnewfont = NULL;
LOGFONTA* plogfont = NULL;
//
// No window, no-op
//
if (!hwnd)
{
goto MakeBoldExit;
}
//
// Get the current Font
//
hfont = (HFONT)SendMessageU(hwnd, WM_GETFONT, 0, 0);
if (!hfont)
{
hr = GetLastError();
goto MakeBoldExit;
}
//
// Allocate a logical font struct to work with
//
plogfont = (LOGFONTA*) CmMalloc(sizeof(LOGFONTA));
if (!plogfont)
{
hr = GetLastError();
goto MakeBoldExit;
}
//
// Get the logical font and make it bold and a larger size
// if the caller specified the fSize flag as TRUE.
//
if (!GetObjectA(hfont, sizeof(LOGFONTA), (LPVOID)plogfont))
{
hr = GetLastError();
goto MakeBoldExit;
}
if (abs(plogfont->lfHeight) < 24 && fSize)
{
plogfont->lfHeight = plogfont->lfHeight + (plogfont->lfHeight / 4);
}
plogfont->lfWeight = FW_BOLD;
//
// Create the new font
//
if (!(hnewfont = CreateFontIndirectA(plogfont)))
{
hr = GetLastError();
goto MakeBoldExit;
}
//
// Tell the window to use the new font
//
SendMessageU(hwnd, WM_SETFONT, (WPARAM)hnewfont, MAKELPARAM(TRUE,0)); //lint !e534 WM_SETFONT doesn't return anything
MakeBoldExit:
CmFree(plogfont);
return hr;
}
//+---------------------------------------------------------------------------
//
// Function: ReleaseBold
//
// Synopsis: Release the bold font use for title of the page
//
// Arguments: hwnd - Window handle of the page
//
// Returns: ERROR_SUCCESS
//
// History: 10/16/96 VetriV Created
//----------------------------------------------------------------------------
CMUTILAPI HRESULT ReleaseBold(HWND hwnd)
{
HFONT hfont = NULL;
hfont = (HFONT)SendMessageU(hwnd, WM_GETFONT, 0, 0);
if (hfont)
{
DeleteObject(hfont);
}
return ERROR_SUCCESS;
}
//+---------------------------------------------------------------------------
//
// Function: UpdateFont
//
// Synopsis: Converts all child controls of the specified dialog to use
// DBCS compatible font. Use this in WM_INITDIALOG.
//
// Arguments: hwnd - Window handle of the dialog
//
// Returns: Nothing
//
// History: 4/31/97 - a-frankh - Created
// 5/13/97 - a-nichb - Revised to enum child windows
//
//----------------------------------------------------------------------------
CMUTILAPI void UpdateFont(HWND hDlg)
{
BOOL bEnum = FALSE;
HFONT hFont = NULL;
//
// Get the default UI font, or system font if that fails
//
hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
if (hFont == NULL)
{
hFont = (HFONT) GetStockObject(SYSTEM_FONT);
}
//
// Enum child windows and set new font
//
if (hFont)
{
bEnum = EnumChildWindows(hDlg, EnumChildProc, (LPARAM) hFont);
MYDBGTST(!bEnum, (TEXT("UpdateFont() - EnumChildWindows() failed.")));
}
}