Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

355 lines
12 KiB

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