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();
}