www.pudn.com > CDX.rar > GradientTestView.cpp


// GradientTestView.cpp : implementation of the CGradientTestView class 
// 
 
#include "stdafx.h" 
#include "GradientTest.h" 
 
#include "GradientTestDoc.h" 
#include "GradientTestView.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CGradientTestView 
 
IMPLEMENT_DYNCREATE(CGradientTestView, CView) 
 
BEGIN_MESSAGE_MAP(CGradientTestView, CView) 
	//{{AFX_MSG_MAP(CGradientTestView) 
	ON_WM_SIZE() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CGradientTestView construction/destruction 
 
CGradientTestView::CGradientTestView() 
{ 
	// TODO: add construction code here 
 
} 
 
CGradientTestView::~CGradientTestView() 
{ 
	if ( m_MemDC ) 
	{ 
		m_MemDC.SelectObject(m_OldMemoryBitmap); 
		m_MemDC.DeleteDC(); 
	} 
	if ( m_MemoryBitmap.GetSafeHandle() ) 
		m_MemoryBitmap.DeleteObject(); 
} 
 
BOOL CGradientTestView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CGradientTestView drawing 
 
void CGradientTestView::OnDraw(CDC* pDC) 
{ 
	CGradientTestDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here 
 
	RECT rect; 
	GetClientRect(&rect); 
	pDC->BitBlt( 0, 0, rect.right-rect.left, rect.bottom-rect.top, &m_MemDC, 0, 0, SRCCOPY ); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CGradientTestView diagnostics 
 
#ifdef _DEBUG 
void CGradientTestView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CGradientTestView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CGradientTestDoc* CGradientTestView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGradientTestDoc))); 
	return (CGradientTestDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CGradientTestView message handlers 
 
void CGradientTestView::OnInitialUpdate()  
{ 
	CView::OnInitialUpdate(); 
	 
	// TODO: Add your specialized code here and/or call the base class 
	 
	RECT rect; 
	GetClientRect(&rect); 
	CDC* pDC = GetDC(); 
 
	if ( m_MemDC ) 
		m_MemDC.DeleteDC(); 
 
	m_MemDC.CreateCompatibleDC(pDC); 
 
	if ( m_MemoryBitmap.GetSafeHandle() ) 
		m_MemoryBitmap.DeleteObject(); 
 
	m_MemoryBitmap.CreateCompatibleBitmap( pDC, rect.right - rect.left, rect.bottom - rect.top ); 
	m_OldMemoryBitmap = m_MemDC.SelectObject(&m_MemoryBitmap); 
	::FillRect( m_MemDC.m_hDC, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH) ); 
	ReleaseDC(pDC); 
 
	DrawGradients(); 
} 
 
void CGradientTestView::DrawGradients() 
{ 
	RECT rect1 = {0, 0, 200, 200}; 
	RECT rect2 = {220, 0, 420, 200}; 
	RECT rect3 = {440, 0, 640, 200}; 
	RECT rect4 = {660, 0, 860, 200}; 
	RECT rect5 = {0, 220, 200, 420}; 
	RECT rect6 = {220, 220, 420, 420}; 
	RECT rect7 = {440, 220, 640, 420}; 
	RECT rect8 = {660, 220, 860, 420}; 
 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect1, RGB(0,0,255), RGB(255,0,0), GRADIENT_HORIZONTAL, TRANSFORMATION_NONE ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect2, RGB(0,0,255), RGB(255,0,0), GRADIENT_VERTICAL, TRANSFORMATION_NONE ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect3, RGB(0,0,255), RGB(255,0,0), GRADIENT_RADIAL, TRANSFORMATION_NONE ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect4, RGB(0,0,255), RGB(255,0,0), GRADIENT_FDIAGONAL, TRANSFORMATION_NONE ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect5, RGB(0,0,255), RGB(255,0,0), GRADIENT_RADIAL, TRANSFORMATION_CHARICATURE ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect6, RGB(0,0,255), RGB(255,0,0), GRADIENT_VERTICAL, TRANSFORMATION_FISHEYE ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect7, RGB(0,0,255), RGB(255,0,0), GRADIENT_HORIZONTAL, TRANSFORMATION_SWIRLED ); 
	m_GradientRender.DrawGradient( m_MemDC.m_hDC, rect8, RGB(0,0,255), RGB(255,0,0), GRADIENT_FDIAGONAL, TRANSFORMATION_CYLINDER ); 
 
	m_MemDC.SetBkMode(TRANSPARENT); 
	COLORREF oldTextColor = m_MemDC.SetTextColor(RGB(255,255,255)); 
	m_MemDC.SetTextAlign(TA_RIGHT); 
 
	m_MemDC.TextOut( 195, 160, "Grad. type: HORIZONTAL" ); 
	m_MemDC.TextOut( 195, 180, "Transf. type: NONE" ); 
	m_MemDC.TextOut( 415, 160, "Grad. type: VERTICAL" ); 
	m_MemDC.TextOut( 415, 180, "Transf. type: NONE" ); 
	m_MemDC.TextOut( 635, 160, "Grad. type: RADIAL" ); 
	m_MemDC.TextOut( 635, 180, "Transf. type: NONE" ); 
	m_MemDC.TextOut( 855, 160, "Grad. type: FDIAGONAL" ); 
	m_MemDC.TextOut( 855, 180, "Transf. type: NONE" ); 
	m_MemDC.TextOut( 195, 380, "Grad. type: RADIAL" ); 
	m_MemDC.TextOut( 195, 400, "Transf. type: CHARICATURE" ); 
	m_MemDC.TextOut( 415, 380, "Grad. type: VERTICAL" ); 
	m_MemDC.TextOut( 415, 400, "Transf. type: FISHEYE" ); 
	m_MemDC.TextOut( 635, 380, "Grad. type: HORIZONTAL" ); 
	m_MemDC.TextOut( 635, 400, "Transf. type: SWIRLED" ); 
	m_MemDC.TextOut( 855, 380, "Grad. type: FDIAGONAL" ); 
	m_MemDC.TextOut( 855, 400, "Transf. type: CYLINDER" ); 
 
	  m_MemDC.SetTextAlign(TA_LEFT); 
	m_MemDC.SetTextColor(oldTextColor); 
	m_MemDC.SetBkMode(OPAQUE); 
} 
 
void CGradientTestView::OnSize(UINT nType, int cx, int cy)  
{ 
	CView::OnSize(nType, cx, cy); 
	 
	// TODO: Add your message handler code here 
	 
	RECT rect; 
	GetClientRect(&rect); 
	CDC* pDC = GetDC(); 
	 
	if ( m_MemDC ) 
		m_MemDC.DeleteDC(); 
 
	m_MemDC.CreateCompatibleDC(pDC); 
	 
	if ( m_MemoryBitmap.GetSafeHandle() ) 
		m_MemoryBitmap.DeleteObject(); 
 
	m_MemoryBitmap.CreateCompatibleBitmap( pDC, cx, cy ); 
	m_OldMemoryBitmap = m_MemDC.SelectObject(&m_MemoryBitmap); 
 
	RECT fillRect = {0, 0, cx, cy}; 
 
	::FillRect( m_MemDC.m_hDC, &fillRect, (HBRUSH)GetStockObject(WHITE_BRUSH) ); 
	ReleaseDC(pDC); 
 
	DrawGradients(); 
}