|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/
/*
bltdc.hxx BLT display and device context wrappers: definition
FILE HISTORY: beng 15-May-1991 Split from bltmisc.hxx terryk 18-Jul-1991 Add more function to DEVICE_CONTEXT. terryk 20-Jul-1991 Add PAINT_DEVICE_CONTEXT object Add fReleaseDC in DISPLAY_WINDOW johnl 09-Sep-1991 Added DrawFocusRect beng 26-Sep-1991 C7 delta KeithMo 07-Aug-1992 STRICTified. */
#ifndef _BLT_HXX_
#error "Don't include this file directly; instead, include it through blt.hxx"
#endif // _BLT_HXX_
#ifndef _BLTDC_HXX_
#define _BLTDC_HXX_
#include "base.hxx"
#include "bltbitmp.hxx" // DISPLAY_MAP
#include "bltmisc.hxx" // XYDIMENSION
#include "string.hxx" // NLS_STR et al.
#include "bltrect.hxx"
DLL_CLASS WINDOW;
#if !defined(MAKEINTRESOURCE) // was windows not yet included?
struct TEXTMETRIC; // declared in windows.h as part of GDI
#endif
/**********************************************************************
NAME: DEVICE_CONTEXT
SYNOPSIS: Device context class (general GDI fun and games)
INTERFACE: DEVICE_CONTEXT() - constructor ~DEVICE_CONTEXT() - destructor SelectPen() - select an HPEN into the DC SelectFont() - select an HFONT into the DC SelectBrush() - select an HBRUSH into the DC SelectBitmap() - select an HBITMAP into the DC QueryTextExtent() - get the width and height of a string QueryTextMetrics() - get the font information QueryHdc() - return the current HDC BitBlt() - call Window bitblt TextOut() - display text InvertRect() - invert the color within the given rectangle DrawFocusRect() - Draw Windows focus rectangle (this is an xor operation). DrawRect() - Draws a filled rectangle (using current selected brush) FrameRect() - Draws an unfilled rectangle using the passed brush
SetBkMode() - Sets the background draw mode (OPAQUE or TRANSPARENT). GetBkMode() - Queries the background draw mode SetMapMode() - sets the mapping mode (e.g. MM_TEXT) GetMapMode() - queries the mapping mode SetBkColor() - set the background color GetBkColor() - query the background color SetTextColor() - set the text color GetTextColor() - query the text color ExtTextOut() - extension of text out function DrawText() - draws text
USES: XYDIMENSION
CAVEATS: Most of these functions are just thin wrappers around GDI functions. They don't have much on-line help. Go look it up in WinHelp!
NOTES: Get functions should be Query. Yeah, yeah.
HISTORY: RustanL 21-Nov-1990 Created terryk 10-Apr-1991 add QueryHdc terryk 11-Apr-1991 add GetPolyFillMode, SetPolyFillMode, Polygon, InvertRect beng 15-May-1991 Change QueryTextExtent; make QueryHdc const beng 10-Jul-1991 Remove Paint member; add QueryFontHeight, TextOut; additional forms of BitBlt terryk 18-Jul-1991 Add more functions: SetBkColor() SetTextColor() SetTextAlign() ExtTextOut() GetBkColor() Johnl 09-Sep-1991 Added DrawFocusRect() Johnl 11-Sep-1991 Added DrawRect(), FrameRect, SetBkMode & GetBkMode beng 04-Oct-1991 Win32 conversion beng 09-Oct-1991 Disabled Polygon member fcns beng 30-Mar-1992 All Color fcns take COLORREF parms; MapMode fcns; inline many fcns beng 05-May-1992 Added nls ExtTextOut; DrawText member beng 12-May-1992 Added LineTo, MoveTo, QueryAveCharWidth members KeithMo 07-Aug-1992 Added type-specific SelectXxx methods, made the generic SelectObject protected.
**********************************************************************/
DLL_CLASS DEVICE_CONTEXT { private: HDC _hDC;
protected:
HGDIOBJ SelectObject( HGDIOBJ hObject ) { return ::SelectObject( _hDC, hObject ); }
public: DEVICE_CONTEXT( HDC hDC ) : _hDC(hDC) {};
HDC QueryHdc() const { return _hDC; }
HPEN SelectPen( HPEN hPen ) { return (HPEN)SelectObject( (HGDIOBJ)hPen ); }
HFONT SelectFont( HFONT hFont ) { return (HFONT)SelectObject( (HGDIOBJ)hFont ); }
HBRUSH SelectBrush( HBRUSH hBrush ) { return (HBRUSH)SelectObject( (HGDIOBJ)hBrush ); }
HBITMAP SelectBitmap( HBITMAP hBitmap ) { return (HBITMAP)SelectObject( (HGDIOBJ)hBitmap ); }
XYDIMENSION QueryTextExtent( const TCHAR * psz, UINT cbTextLen ) const; XYDIMENSION QueryTextExtent( const NLS_STR &nls ) const;
BOOL QueryTextMetrics( TEXTMETRIC * ptm ) const; INT QueryFontHeight() const; INT QueryAveCharWidth() const;
BOOL TextOut( const NLS_STR &nls, XYPOINT xy ) const; BOOL TextOut( const NLS_STR &nls, XYPOINT xy, const RECT * prectClip ) const; BOOL TextOut( const TCHAR *psz, INT cch, INT xLeft, INT yTop ) const; BOOL TextOut( const TCHAR *psz, INT cch, INT xLeft, INT yTop, const RECT * prectClip ) const;
BOOL BitBlt( INT xDest, INT yDest, INT dxDest, INT dyDest, const DEVICE_CONTEXT & dcSource, INT xSource, INT ySource, ULONG ulRasterOperation ); BOOL BitBlt( const XYPOINT & xyDest, XYDIMENSION dxyDest, const DEVICE_CONTEXT & dcSource, const XYPOINT & xySource, ULONG ulRasterOperation );
VOID DrawFocusRect( const RECT * pRect ) const; VOID DrawRect( const RECT * lpRect ) const; VOID FrameRect( const RECT * lpRect, HBRUSH hBrush ) const; VOID InvertRect( const RECT * lpRect ) const;
#if 0 // (disabled - never used, too much trouble to wrap)
BOOL Polygon( const POINT * ppt, INT cxy ) const; INT GetPolyFillMode() const; INT SetPolyFillMode( INT nPolyFillMode ); #endif
INT GetMapMode() const { return ::GetMapMode( _hDC ); }
INT SetMapMode( INT nNewMapMode ) { return ::SetMapMode( _hDC, nNewMapMode ); }
INT GetBkMode() const { return ::GetBkMode( _hDC ); }
INT SetBkMode( INT nNewBkMode ) { return ::SetBkMode( _hDC, nNewBkMode ); }
COLORREF GetBkColor() const { return ::GetBkColor( _hDC ); }
COLORREF SetBkColor( COLORREF crColor ) { return ::SetBkColor( _hDC, crColor ); }
COLORREF GetTextColor() const { return ::GetTextColor( _hDC ); }
COLORREF SetTextColor( COLORREF crColor ) { return ::SetTextColor( _hDC, crColor ); }
INT DrawText( const NLS_STR & nls, RECT * prc, UINT nStyles ) { return ::DrawText( _hDC, nls.QueryPch(), -1, prc, nStyles ); }
UINT SetTextAlign( UINT wFlag ); BOOL ExtTextOut( INT x, INT y, UINT nOptions, const RECT * lpRect, const TCHAR * pszStr, INT cch, INT * pDx = NULL ); BOOL ExtTextOut( INT x, INT y, UINT nOptions, const RECT * prect, const NLS_STR & nls, INT * pDx = NULL ) { return ExtTextOut(x, y, nOptions, prect, nls.QueryPch(), nls.QueryTextLength(), pDx); }
VOID LineTo( INT x, INT y ) const { ::LineTo( _hDC, x, y ); } VOID MoveTo( INT x, INT y ) const { ::MoveToEx( _hDC, x, y, NULL ); } };
/**********************************************************************
NAME: DISPLAY_CONTEXT
SYNOPSIS: Display context
INTERFACE: DISPLAY_CONTEXT() - constructor ~DISPLAY_CONTEXT() - destructor QueryTextWidth() - return the width of the given string in logical units on the screen
PARENT: DEVICE_CONTEXT
USES: WINDOW
HISTORY: RustanL 21-Nov-1990 Created terryk 10-Apr-1991 Add querytextwidth beng 04-Oct-1991 Win32 conversion
**********************************************************************/
DLL_CLASS DISPLAY_CONTEXT : public DEVICE_CONTEXT { private: HWND _hwnd; BOOL _fReleaseDC;
protected: HWND QueryHwnd() { return _hwnd; }
public: DISPLAY_CONTEXT( HWND hwnd ); DISPLAY_CONTEXT( WINDOW * pwin ); DISPLAY_CONTEXT( WINDOW * pwin, HDC hdc ); ~DISPLAY_CONTEXT();
INT QueryTextWidth( const NLS_STR & nlsStr ) const; INT QueryTextWidth( const TCHAR * psz, UINT cbTextLen ) const; };
/**********************************************************************
NAME: PAINT_DISPLAY_CONTEXT
SYNOPSIS: Replace BeginPaint and EndPaint in window
INTERFACE: PAINT_DISPLAY_CONTEXT() - constructor. Call ::BeginPaint. ~PAINT_DISPLAY_CONTEXT() - destructor. Call ::EndPaint.
PARENT: DISPLAY_CONTEXT
USES: WINDOW
HISTORY: terryk 20-Jul-1991 Created beng 09-Oct-1991 Shrank a bit beng 14-May-1992 Added QueryInvalidRect
**********************************************************************/
DLL_CLASS PAINT_DISPLAY_CONTEXT : public DISPLAY_CONTEXT { private: PAINTSTRUCT _ps; XYRECT _rNeedsPainting; // Has to copy into this just to
// use the XYRECT member fcns.
// CODEWORK: make an adopting XYRECT.
public: PAINT_DISPLAY_CONTEXT( WINDOW * pwnd ) : DISPLAY_CONTEXT( pwnd, ::BeginPaint( pwnd->QueryHwnd(), &_ps )), _rNeedsPainting(_ps.rcPaint) { ; }
~PAINT_DISPLAY_CONTEXT() { ::EndPaint( QueryHwnd(), &_ps ); }
const XYRECT & QueryInvalidRect() const { return _rNeedsPainting; } };
/**********************************************************************
NAME: MEMORY_DC
SYNOPSIS: "Memory" device context (copied from existing DC)
INTERFACE: MEMORY_DC() - constructor ~MEMORY_DC() - destructor
PARENT: DEVICE_CONTEXT
HISTORY: RustanL 21-Nov-1990 Created
**********************************************************************/
DLL_CLASS MEMORY_DC : public DEVICE_CONTEXT { public: MEMORY_DC( DEVICE_CONTEXT & dc ); ~MEMORY_DC(); };
/**********************************************************************
NAME: SCREEN_DC
SYNOPSIS: Screen device context
INTERFACE: SCREEN_DC() - constructor ~SCREEN_DC() - destructor
PARENT: DEVICE_CONTEXT
HISTORY: RustanL 21-Nov-1990 Created
**********************************************************************/
DLL_CLASS SCREEN_DC : public DEVICE_CONTEXT { public: SCREEN_DC(); ~SCREEN_DC(); };
#endif // _BLTDC_HXX_ - end of file
|