MemDC.h
上传用户:aokegd
上传日期:2009-12-14
资源大小:1276k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. #if !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)
  2. #define AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_
  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. // MemDC.h : header file
  7. class CMemDC : public CDC
  8. {
  9. public:
  10. //构造内存设备场景
  11. CMemDC(CDC* pDC) : CDC()
  12.     {
  13. ASSERT(pDC != NULL);
  14. m_pDC = pDC;
  15. m_pOldBitmap = NULL;
  16.         m_bMemDC = !pDC->IsPrinting();
  17.         if (m_bMemDC)
  18. {
  19.             pDC->GetClipBox(&m_rect);
  20.             CreateCompatibleDC(pDC);
  21.             m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
  22. m_pOldBitmap = SelectObject(&m_bitmap);
  23.             SetWindowOrg(m_rect.left, m_rect.top);
  24.         }
  25. else
  26. {
  27.             m_bPrinting = pDC->m_bPrinting;
  28.             m_hDC = pDC->m_hDC;
  29.             m_hAttribDC = pDC->m_hAttribDC;
  30.         }
  31. }
  32. //析构
  33. ~CMemDC()
  34.     {
  35. if (m_bMemDC) {
  36. m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
  37. this, m_rect.left, m_rect.top, SRCCOPY);
  38.             SelectObject(m_pOldBitmap);
  39. } else {
  40.             m_hDC = m_hAttribDC = NULL;
  41. }
  42. }
  43.     CMemDC* operator->() {return this;}
  44.     operator CMemDC*() {return this;}
  45. private:
  46. CBitmap  m_bitmap;
  47.     CBitmap* m_pOldBitmap;
  48.     CDC*     m_pDC;
  49.     CRect    m_rect;
  50.     BOOL     m_bMemDC;
  51. };
  52. /////////////////////////////////////////////////////////////////////////////
  53. //{{AFX_INSERT_LOCATION}}
  54. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  55. #endif // !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)