You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.7 KiB
C++
119 lines
2.7 KiB
C++
// XTMemDC.cpp : implementation of the CXTMemDC class.
|
|
//
|
|
// This file is a part of the XTREME CONTROLS MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "Common/XTPColorManager.h"
|
|
#include "Common/XTPDrawHelpers.h"
|
|
#include "XTMemDC.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC(CXTMemDC, CDC)
|
|
|
|
//===========================================================================
|
|
// CXTMemDC class
|
|
//===========================================================================
|
|
|
|
CXTMemDC::CXTMemDC(CDC* pDC, const CRect& rect, CXTPPaintManagerColorGradient crBack/*=GetXtremeColor(COLOR_3DFACE)*/, BOOL bHorz/*=FALSE*/)
|
|
{
|
|
ASSERT(pDC != NULL);
|
|
m_pDC = pDC;
|
|
if (!m_pDC)
|
|
return;
|
|
|
|
// If rect is NULL, use the device context's clip box.
|
|
if (rect.IsRectEmpty())
|
|
m_pDC->GetClipBox(&m_rc);
|
|
else
|
|
m_rc.CopyRect(&rect);
|
|
|
|
// Create the memory DC, set Map Mode
|
|
if (CreateCompatibleDC(m_pDC))
|
|
{
|
|
SetMapMode(m_pDC->GetMapMode());
|
|
|
|
// Create a bitmap big enough to hold the window's image
|
|
m_bitmap.CreateCompatibleBitmap(m_pDC, m_rc.Width(), m_rc.Height());
|
|
|
|
// Select the bitmap into the memory DC
|
|
m_hOldBitmap = (HBITMAP)SelectObject(&m_bitmap)->GetSafeHandle();
|
|
|
|
if (crBack != COLORREF_NULL)
|
|
{
|
|
// fill background
|
|
XTPDrawHelpers()->GradientFill(this, CRect(0, 0, m_rc.Width(), m_rc.Height()), crBack, bHorz);
|
|
}
|
|
|
|
m_bValid = TRUE;
|
|
}
|
|
|
|
// Something bad happened, could be GDI leak, didn't create device context.
|
|
else
|
|
{
|
|
m_bValid = FALSE;
|
|
m_hOldBitmap = NULL;
|
|
}
|
|
}
|
|
|
|
CXTMemDC::~CXTMemDC()
|
|
{
|
|
if (IsValid())
|
|
{
|
|
// Blt it
|
|
m_pDC->BitBlt(m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(),
|
|
this, 0, 0, SRCCOPY);
|
|
}
|
|
|
|
// Select the original bitmap back in
|
|
if (m_hOldBitmap != NULL)
|
|
{
|
|
SelectObject(m_hOldBitmap);
|
|
m_bitmap.DeleteObject();
|
|
}
|
|
|
|
DeleteDC();
|
|
}
|
|
|
|
CBitmap& CXTMemDC::GetBitmap()
|
|
{
|
|
return m_bitmap;
|
|
}
|
|
|
|
void CXTMemDC::Discard()
|
|
{
|
|
m_bValid = FALSE;
|
|
}
|
|
|
|
BOOL CXTMemDC::IsValid() const
|
|
{
|
|
return m_bValid;
|
|
}
|
|
|
|
void CXTMemDC::FromDC()
|
|
{
|
|
BitBlt(0, 0, m_rc.Width(), m_rc.Height(), m_pDC,
|
|
m_rc.left, m_rc.top, SRCCOPY);
|
|
}
|