/**********************************************************************/ /** 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