|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-2002 Microsoft Corporation
//
// Module Name:
// AtlBaseSheet.cpp
//
// Abstract:
// Implementation of the CBaseSheetWindow class.
//
// Author:
// David Potter (davidp) December 4, 1997
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include <StrSafe.h>
#include "AtlBaseSheet.h"
#include "AtlExtDll.h"
/////////////////////////////////////////////////////////////////////////////
// Global Variables
/////////////////////////////////////////////////////////////////////////////
static LPCTSTR g_pszDefaultFontFaceName = _T("MS Shell Dlg");
/////////////////////////////////////////////////////////////////////////////
// class CBaseSheetWindow
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBaseSheetWindow::~CBaseSheetWindow
//
// Routine Description:
// Destructor.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
CBaseSheetWindow::~CBaseSheetWindow( void ) { //
// Delete the extension information.
//
delete m_pext;
} //*** CBaseSheetWindow::~CBaseSheetWindow()
/////////////////////////////////////////////////////////////////////////////
//++
//
// static
// CBaseSheetWindow::BCreateFont
//
// Routine Description:
// Create a font with only point size and type face name.
//
// Arguments:
// rfont [OUT] Font to create.
// nPoints [IN] Point size.
// pszFaceName [IN] Font face name. Defaults to "MS Shell Dlg".
// bBold [IN] Font should be bold.
// bItalic [IN] Font should be italic.
// bUnderline [IN] Font should be underline.
//
// Return Value:
// TRUE Font created successfully.
// FALSE Error creating font. Call GetLastError() for more details.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CBaseSheetWindow::BCreateFont( OUT CFont & rfont, IN LONG nPoints, IN LPCTSTR pszFaceName, // = _T("MS Shell Dlg")
IN BOOL bBold, // = FALSE
IN BOOL bItalic, // = FALSE
IN BOOL bUnderline // = FALSE
) { HRESULT hr; HFONT hfont = NULL;
//
// Get non-client metrics for basing the new font off of.
//
NONCLIENTMETRICS ncm = { 0 }; ncm.cbSize = sizeof( ncm ); SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
//
// Copy the message font and set the face name and point size to what
// was passed in. The point size needs to be multiplied by 10 due to how
// the CFont::CreatePointFontIndirect calculates the actual font height.
//
LOGFONT lfNewFont = ncm.lfMessageFont; if ( pszFaceName == NULL ) { pszFaceName = g_pszDefaultFontFaceName; } // if: no type face name specified
ATLASSERT( _tcslen( pszFaceName ) + 1 < RTL_NUMBER_OF( lfNewFont.lfFaceName ) ); hr = StringCchCopy( lfNewFont.lfFaceName, RTL_NUMBER_OF( lfNewFont.lfFaceName ), pszFaceName ); if ( FAILED( hr ) ) { SetLastError( hr ); goto Cleanup; } lfNewFont.lfHeight = nPoints * 10;
//
// Set bold, italic, and underline values.
//
if ( bBold ) { lfNewFont.lfWeight = FW_BOLD; } // if: bold font requested
if ( bItalic ) { lfNewFont.lfItalic = TRUE; } // if: italic font requested
if ( bUnderline ) { lfNewFont.lfUnderline = TRUE; } // if: underlined font requested
//
// Create the font.
//
hfont = rfont.CreatePointFontIndirect( &lfNewFont );
Cleanup:
return ( hfont != NULL );
} //*** BCreateFont()
/////////////////////////////////////////////////////////////////////////////
//++
//
// static
// CBaseSheetWindow::BCreateFont
//
// Routine Description:
// Create a font with only point size and type face name.
//
// Arguments:
// rfont [OUT] Font to create.
// idsPoints [IN] Resource ID for the font point size.
// idsFaceName [IN] Resource ID for the font face name. Defaults to "MS Shell Dlg".
// bBold [IN] Font should be bold.
// bItalic [IN] Font should be italic.
// bUnderline [IN] Font should be underline.
//
// Return Value:
// TRUE Font created successfully.
// FALSE Error creating font. Call GetLastError() for more details.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CBaseSheetWindow::BCreateFont( OUT CFont & rfont, IN UINT idsPoints, IN UINT idsFaceName, IN BOOL bBold, // = FALSE
IN BOOL bItalic, // = FALSE
IN BOOL bUnderline // = FALSE
) { BOOL bSuccess; CString strFaceName; CString strPoints; LONG nPoints;
//
// Load the face name.
//
bSuccess = strFaceName.LoadString( idsFaceName ); ATLASSERT( bSuccess ); if ( ! bSuccess ) { strFaceName = g_pszDefaultFontFaceName; } // if: no errors loading the string
//
// Load the point size.
//
bSuccess = strPoints.LoadString( idsPoints ); ATLASSERT( bSuccess ); if ( ! bSuccess) { nPoints = 12; } // if: no errors loading the string
else { nPoints = _tcstoul( strPoints, NULL, 10 ); } // else: error loading the string
//
// Create the font.
//
return BCreateFont( rfont, nPoints, strFaceName, bBold, bItalic, bUnderline );
} //*** CBaseSheetWindow::BCreateFont()
|