home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / gdi / fonts / gridfont / canvas.hxx < prev    next >
Text File  |  1997-10-05  |  4KB  |  167 lines

  1. #ifndef __CANVAS_HXX_
  2. #define __CANVAS_HXX_
  3.  
  4. //--------------------------------------------------------------------
  5. // File: Canvas.hxx
  6. //
  7. // Classes:
  8. //      CPoint - POINT with vector operations 
  9. //      CCanvas - Base class for Device contexts
  10. //      CScreenCanvas - Device context for client area or display
  11. //      CPaintCanvas  - Device context for WM_PAINT message handling
  12. //
  13. // History: 22-Jan-1993 Asmusf  Created
  14. //
  15. // Copyright (C) 1993-1997 Microsoft Corp. All Rights reserved
  16. //
  17. //--------------------------------------------------------------------
  18.  
  19. //========= CPoint ==========================================
  20.  
  21. class CPoint: public tagPOINT
  22. {
  23. public:
  24.         CPoint()                    {x=0; y=0;  };
  25.         CPoint(COORD X, COORD Y) {x = X; y = Y;     };
  26.         CPoint(POINT pt)     {x = pt.x; y=pt.y; };
  27.  
  28.         CPoint operator +(CPoint &pt){ return CPoint(x+pt.x, y+pt.y); };
  29.         CPoint operator -(CPoint &pt){ return CPoint(x-pt.x, y-pt.y); };
  30.         CPoint operator *(int c)           { return CPoint(x*c, y*c); };
  31.         CPoint operator /(int c)           { return CPoint(x/c, y/c); };
  32. };
  33.  
  34. //======== CCanvas ==========================================
  35. // Base class: Any form of canvas
  36. // Inline methods only for speed.
  37.  
  38. class CCanvas
  39. {
  40. public:
  41.     CCanvas():_hdc(0) 
  42.     {
  43.     }
  44.  
  45.     operator HDC() { return _hdc; }
  46.  
  47.     void TextAlign( WORD aligntype )
  48.     {
  49.         SetTextAlign(_hdc, aligntype );
  50.     }
  51.  
  52.     void Line ( COORD x1, COORD y1, COORD x2, COORD y2 )
  53.     {
  54.         MoveToEx ( _hdc, x1, y1, NULL );
  55.         LineTo   ( _hdc, x2, y2 );
  56.     }
  57.  
  58.     void Clear ( RECT& rect )
  59.     {
  60.         // Trick: fast erase with Extended Text Out     
  61.         ExtTextOut (_hdc, rect.left, rect.top, ETO_OPAQUE, &rect, TEXT(""), 0, NULL );
  62.     }
  63.  
  64.     void Text ( int x, int y, LPTSTR buf, int cBuf )
  65.     {
  66.         TextOut ( _hdc, x, y, buf, cBuf );
  67.     }
  68.  
  69.     void RCText ( LPRECT lprc, LPTSTR buf, int cBuf )
  70.     {
  71.         DrawText ( _hdc, buf, cBuf, lprc, DT_LEFT | DT_WORDBREAK | DT_NOCLIP | DT_NOPREFIX);
  72.     }
  73.  
  74.     void Char ( int x, int y, TCHAR ch )
  75.     {
  76.         TextOut ( _hdc, x, y,(LPTSTR) &ch, 1 );
  77.     }
  78.  
  79.  
  80.     void Circle (int x, int y, int r)
  81.     {
  82.         Ellipse (_hdc,  x-r/2, y-r/2, x+r/2, y+r/2 );
  83.     }
  84.  
  85.     void Scale(UINT iScale)
  86.     {
  87.         // Logical TWIPS
  88.         SetMapMode (_hdc, MM_ANISOTROPIC);
  89.  
  90.         SetWindowExtEx (_hdc, MulDiv(INCH1,iScale,100), MulDiv(INCH1,iScale,100), NULL);
  91.         SetViewportExtEx (_hdc, GetDeviceCaps (_hdc, LOGPIXELSX),
  92.                 GetDeviceCaps (_hdc, LOGPIXELSY), NULL);
  93.     }
  94.     
  95.     void Scroll(int dx, int dy)
  96.     {
  97.         SetWindowOrgEx(_hdc, dx, dy, NULL );
  98.     }
  99.  
  100.     void DPtoLP( LPPOINT lppt )
  101.     {
  102.         ::DPtoLP(_hdc, lppt, 1);
  103.     };
  104.  
  105.     void LPtoDP( LPPOINT lppt )
  106.     {
  107.         ::LPtoDP(_hdc, lppt, 1);
  108.     };
  109.  
  110. protected:
  111.     void Init ( HDC hdc ) 
  112.     { 
  113.         _hdc = hdc;
  114.         TextAlign(TA_CENTER | TA_BASELINE );
  115.     };
  116.  
  117.     HDC  _hdc;
  118. };
  119.  
  120. //======== CScreenCanvas ====================================
  121. // Device Context
  122. // Use for painting on client area other than WM_PAINT
  123.  
  124. class CScreenCanvas: public CCanvas
  125. {
  126. public:
  127.     CScreenCanvas ( HWND hwnd ): _hwnd(hwnd)
  128.     {
  129.         Init (GetDC ( hwnd ));
  130.     }
  131.  
  132.     ~CScreenCanvas ()
  133.     {
  134.         ReleaseDC ( _hwnd, _hdc );
  135.     }
  136.  
  137. protected:
  138.  
  139.     HWND _hwnd;
  140. };
  141.  
  142. //======== CPaintCanvas =====================================
  143. // Use for painting after WM_PAINT
  144.  
  145. class CPaintCanvas: public CCanvas
  146. {
  147. public:
  148.     CPaintCanvas ( HWND hwnd ): _hwnd(hwnd)
  149.     {
  150.         BeginPaint ( _hwnd, &_paint );
  151.         Init ( _paint.hdc );
  152.     }
  153.  
  154.     ~CPaintCanvas ()
  155.     {
  156.         EndPaint(_hwnd, &_paint );
  157.     }
  158.  
  159.     RECT GetRect() { return _paint.rcPaint; };
  160. protected:
  161.  
  162.     PAINTSTRUCT _paint;
  163.     HWND        _hwnd;
  164. };
  165.  
  166. #endif
  167.