|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/
/*
bltfont.hxx This file contains the definition for the BLT FONT class.
FILE HISTORY: Johnl 03-Apr-1991 Created beng 14-May-1991 Made depend on blt.hxx for clients terryk 26-Nov-1991 Added FONT_DEFAULT_FIXED_PITCH
*/
#ifndef _BLT_HXX_
#error "Don't include this file directly; instead, include it through blt.hxx"
#endif // _BLT_HXX_
#ifndef _BLTFONT_HXX_
#define _BLTFONT_HXX_
/* Default fonts (will currently resolve to Helv. 8).
*/ enum FontType { FONT_DEFAULT, FONT_DEFAULT_FIXED_PITCH, FONT_DEFAULT_BOLD, FONT_DEFAULT_ITALIC, FONT_DEFAULT_BOLD_ITALIC };
/* Font attributes. Note that FONT_ATT_DEFAULT is mututally exclusive
* from all other attributes. */ enum FontAttributes { FONT_ATT_DEFAULT = 0x0000, // Use default attributes
FONT_ATT_ITALIC = 0x0001, FONT_ATT_BOLD = 0x0002, FONT_ATT_UNDERLINE = 0x0004, FONT_ATT_STRIKEOUT = 0x0008 };
/*************************************************************************
NAME: FONT
SYNOPSIS: The FONT class is a wrapper for the Windows font creation and deletion process. It can be very complex so it is worth wrapping in a class.
INTERFACE: FONT( ) Constructor, where FontType is one of the default fonts (FONT_DEFAULT, FONT_DEFAULT_BOLD, FONT_DEFAULT_ITALIC, or FONT_DEFAULT_BOLD_ITALIC).
FONT() Constructor, where LOGFONT is a filled in LOGFONT structure
FONT() Constructor, where: pchFaceName is the name of the font ("Helv", TmsRmn" etc.) lfPitchAndFamily is the as in the LOGFONT documentation nPointSize is the point size of the font. FontAttributes is a combination of the FontAttributes enum, "|"ed together.
~FONT() Destructor, deletes the font
HFONT QueryFontHandle() Retrieves the handle to the requested font. Will assert out under debug if an error has occurred.
SetFont() Takes a handle to a new font. Must already created be created. Can use this method to prevent deleting of the font if you the set the HFONT to NULL.
SetFont() Takes a LOGFONT. Will delete the old font (if there is one) and creates a new font based on the LOGFONT structure.
QueryError() Returns NERR_Success if construction was successful
CAVEATS:
NOTES: SetXxx methods should be avoided because they require the FONT class to regenerate the font. It is generally better to simply declare a new FONT object with the desired attributes.
HISTORY: Johnl 03-Apr-1991 Created beng 04-Oct-1991 Correct data types
**************************************************************************/
DLL_CLASS FONT : public BASE { private: HFONT _hFont;
public: FONT( enum FontType ); FONT( const LOGFONT & logfont ); FONT( const TCHAR * pchFaceName, BYTE lfPitchAndFamily, INT nPointSize, enum FontAttributes fontatt );
~FONT();
HFONT QueryHandle() const { return _hFont; } APIERR SetFont( HFONT hNewFont ); APIERR SetFont( const LOGFONT & logFont ); };
/*******************************************************************
NAME: BLTLogUnits2Points
SYNOPSIS: Converts a number of logical units to the corresponding Point size
ENTRY: nLogUnits - Count of logical units to convert to points
EXIT: Returns the number of points
NOTES: We are assuming that the default mapping mode (MM_TEXT) is used. In this mapping mode, one logical unit is one pixel. We grab the desktop's pixels per logical inch.
A point is 1/72 of an inch.
See Petzold's chapter on fonts for a discussion of fonts.
HISTORY: Johnl 05-Apr-1991 Created
********************************************************************/
inline INT BLTLogUnits2Points( INT nLogUnits ) { SCREEN_DC dcScreen; INT nLogUnitsPerInch = GetDeviceCaps( dcScreen.QueryHdc(), LOGPIXELSY ); return ( (72 * nLogUnits)/nLogUnitsPerInch ); }
/*******************************************************************
NAME: BLTPoints2LogUnits
SYNOPSIS: Converts a point size to a count of logical units.
ENTRY: nPoints is the font point size
EXIT: Returns the logical units
NOTES: See BLTLogUnits2Points for a discussion
HISTORY: Johnl 05-Apr-1991 Created
********************************************************************/
inline INT BLTPoints2LogUnits( INT nPoints ) { SCREEN_DC dcScreen; INT nLogUnitsPerInch = GetDeviceCaps( dcScreen.QueryHdc(), LOGPIXELSY ); return ( (nPoints * nLogUnitsPerInch)/72 ); }
#endif // _BLTFONT_HXX_ - end of file
|