//+---------------------------------------------------------------------------- // // 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."))); } }