XTMemDC.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:3k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTMemDC.cpp : implementation of the CXTMemDC class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "XTMemDC.h"
  22. #include "Common/XTPDrawHelpers.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #define new DEBUG_NEW
  27. #endif
  28. IMPLEMENT_DYNAMIC(CXTMemDC, CDC)
  29. //===========================================================================
  30. // CXTMemDC class
  31. //===========================================================================
  32. CXTMemDC::CXTMemDC(CDC* pDC, const CRect& rect, CXTPPaintManagerColorGradient crBack/*=GetXtremeColor(COLOR_3DFACE)*/, BOOL bHorz/*=FALSE*/)
  33. {
  34. ASSERT(pDC != NULL);
  35. m_pDC = pDC;
  36. if (!m_pDC)
  37. return;
  38. // If rect is NULL, use the device context's clip box.
  39. if (rect.IsRectEmpty())
  40. m_pDC->GetClipBox(&m_rc);
  41. else
  42. m_rc.CopyRect(&rect);
  43. // Create the memory DC, set Map Mode
  44. if (CreateCompatibleDC(m_pDC))
  45. {
  46. SetMapMode(m_pDC->GetMapMode());
  47. // Create a bitmap big enough to hold the window's image
  48. m_bitmap.CreateCompatibleBitmap(m_pDC, m_rc.Width(), m_rc.Height());
  49. // Select the bitmap into the memory DC
  50. m_hOldBitmap = (HBITMAP)SelectObject(&m_bitmap)->GetSafeHandle();
  51. if (crBack != COLORREF_NULL)
  52. {
  53. // fill background
  54. XTPDrawHelpers()->GradientFill(this, CRect(0, 0, m_rc.Width(), m_rc.Height()), crBack, bHorz);
  55. }
  56. m_bValid = TRUE;
  57. }
  58. // Something bad happened, could be GDI leak, didn't create device context.
  59. else
  60. {
  61. m_bValid = FALSE;
  62. m_hOldBitmap = NULL;
  63. }
  64. }
  65. CXTMemDC::~CXTMemDC()
  66. {
  67. if (IsValid())
  68. {
  69. // Blt it
  70. m_pDC->BitBlt(m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(),
  71. this, 0, 0, SRCCOPY);
  72. }
  73. // Select the original bitmap back in
  74. if (m_hOldBitmap != NULL)
  75. {
  76. SelectObject(m_hOldBitmap);
  77. m_bitmap.DeleteObject();
  78. }
  79. DeleteDC();
  80. }
  81. CBitmap& CXTMemDC::GetBitmap()
  82. {
  83. return m_bitmap;
  84. }
  85. void CXTMemDC::Discard()
  86. {
  87. m_bValid = FALSE;
  88. }
  89. BOOL CXTMemDC::IsValid() const
  90. {
  91. return m_bValid;
  92. }
  93. void CXTMemDC::FromDC()
  94. {
  95. BitBlt(0, 0, m_rc.Width(), m_rc.Height(), m_pDC,
  96. m_rc.left, m_rc.top, SRCCOPY);
  97. }