213 lines
5.2 KiB
C++
213 lines
5.2 KiB
C++
|
//+----------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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.")));
|
||
|
}
|
||
|
}
|