Quantcast
Channel: Visual C forum
Viewing all articles
Browse latest Browse all 15302

Animation problem using double buffering

$
0
0

Hi,

 I am trying to animate a car in a graphic scene. It was working but now i have lost that code. When it runs a window starts developing from right bottom of screen and captures my entire background graphics. Kindly solve this problem.

I am using Visual C 6.0 and windows 7.

// AnimationCarView.cpp : implementation of the CAnimationCarView class
//

#include "stdafx.h"
#include "AnimationCar.h"

#include "AnimationCarDoc.h"
#include "AnimationCarView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAnimationCarView

IMPLEMENT_DYNCREATE(CAnimationCarView, CView)

BEGIN_MESSAGE_MAP(CAnimationCarView, CView)
	//{{AFX_MSG_MAP(CAnimationCarView)
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAnimationCarView construction/destruction

CAnimationCarView::CAnimationCarView()
{
	// TODO: add construction code here
	i=150,j=190,k=145,l=140,m=138,n=195,o=197,p=170,q=148,r=185;
	penGrey.CreatePen(PS_SOLID, 5, RGB(128,128,128));//GREY color
	penLGrey.CreatePen(PS_SOLID,5, RGB(220,220,220));//LGREY color
	penBlack.CreatePen(PS_SOLID, 5, RGB(0,0,0));
	pOldPen=NULL;
	brGrey.CreateSolidBrush(RGB(128, 128, 128));
	brLGrey.CreateSolidBrush(RGB(220,220,220));
	brBlack.CreateSolidBrush(RGB(0, 0, 0));
	pOldBrush=NULL;
}

CAnimationCarView::~CAnimationCarView()
{
}

BOOL CAnimationCarView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CAnimationCarView drawing

void CAnimationCarView::road(CDC* pDC){ 
	CPoint poly6[8]={CPoint(0,400), CPoint(210,400),CPoint(210,440),CPoint(0,440)};
	CPen pen(PS_SOLID, 5, RGB(220,220,220));
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&pen);
	CBrush br(RGB(220, 220, 220));
	CBrush* pOldBrush=NULL;
	pOldBrush=pDC->SelectObject(&br);
	pDC->Polygon(poly6, 4);
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
	}

void CAnimationCarView::mountain(CDC* pDC)
{
	//setcolor(BROWN);
	CPen penBrown(PS_SOLID, 5, RGB(150,75,0));
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&penBrown);
	//line(0,250,700,250);
	pDC->MoveTo(0,250);
	pDC->LineTo(700,250);
	//line(0,250,0,160);
	pDC->MoveTo(0,250);
	pDC->LineTo(0,160);
	//line(0,160,30,200);
	pDC->MoveTo(0,160);
	pDC->LineTo(30,200);
	//line(30,200,80,120);
	pDC->MoveTo(30,200);
	pDC->LineTo(80,120);
    //arc(90,124,30,150,10);
	pDC->AngleArc(90,124,10,30,150);
	//line(99,119,150,180);
	pDC->MoveTo(99,119);
	pDC->LineTo(150,180);
	//line(150,180,220,100);
	pDC->MoveTo(150,180);
	pDC->LineTo(220,100);
	//arc(234,106,30,150,15);
	pDC->AngleArc(234,106,15,30,150);
	//line(248,99,320,200);
	pDC->MoveTo(248,99);
	pDC->LineTo(320,200);
	//line(320,200,370,125);
	pDC->MoveTo(320,200);
	pDC->LineTo(370,125);
	//arc(380,129,30,150,10);
	pDC->AngleArc(380,129,10,30,150);
	//line(389,124,430,180);
	pDC->MoveTo(389,124);
	pDC->LineTo(430,180);
	//line(430,180,505,90);
	pDC->MoveTo(430,180);
	pDC->LineTo(505,90);
	//arc(519,96,30,150,15);
	pDC->AngleArc(519,96,15,30,150);
	//line(533,89,605,200);
	pDC->MoveTo(533,89);
	pDC->LineTo(605,200);
	//line(605,200,700,110);
	pDC->MoveTo(605,200);
	pDC->LineTo(700,170);
	//line(700,170,700,250);
	pDC->MoveTo(700,170);
	pDC->LineTo(700,250);
	CBrush brBrown(RGB(150, 75, 0));
	CBrush* pOldBrush=NULL;
	pOldBrush=pDC->SelectObject(&brBrown);
	pDC->FloodFill(10,245,RGB(150,75,0));
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
}

void CAnimationCarView::stationary_car(CDC* pDC)
{
	//int i=150,j=190,k=145,l=140,m=138,n=195,o=197,p=170,q=148,r=185;
	//CPen penGrey(PS_SOLID, 5, RGB(128,128,128));//GREY color
	CBitmap XMap,*pOldMap;
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&penGrey);
	SIZE Size;
    Size.cx = GetSystemMetrics(SM_CXSCREEN);
    Size.cy = GetSystemMetrics(SM_CYSCREEN);
	XMap.CreateCompatibleBitmap(pDC,Size.cx,Size.cy);
	CDC WorkDC;
	CDC *MyDC=&WorkDC;
	MyDC->CreateCompatibleDC(pDC);
	pOldMap=MyDC->SelectObject(&XMap);
	//line(i,402,j,402);
	MyDC->MoveTo(i,402);
	MyDC->LineTo(j,402);
	//line(j,415,k,415);
	MyDC->MoveTo(j,415);
	MyDC->LineTo(k,415);
	//line(j,402,j,415);
	MyDC->MoveTo(j,402);
	MyDC->LineTo(j,415);
	//line(k,415,i,402);
	MyDC->MoveTo(k,415);
	MyDC->LineTo(i,402);
	//setfillstyle(SOLID_FILL,6);
	//CBrush brGrey(RGB(128, 128, 128));
	CBrush* pOldBrush=NULL;
	//floodfill(p,408,6);
	//NOTE IF FloodFill done after select object, color mixing would occur 
	pOldBrush=MyDC->SelectObject(&brGrey);
	MyDC->FloodFill(p,408,RGB(128,128,128));
	//line(n,415,o,428);
	MyDC->MoveTo(n,415);
	MyDC->LineTo(o,428);
	//line(l,415,m,428);
	MyDC->MoveTo(l,415);
	MyDC->LineTo(m,428);
	//line(l,415,n,415);
	MyDC->MoveTo(l,415);
	MyDC->LineTo(n,415);
	//line(o,428,m,428);
	MyDC->MoveTo(o,428);
	MyDC->LineTo(m,428);
	//setfillstyle(SOLID_FILL,6);
	//floodfill(p,422,6);
	MyDC->FloodFill(p,422,RGB(128,128,128));
	MyDC->SelectObject(pOldBrush);
	MyDC->SelectObject(pOldPen);
	//Drawing wheels
	//circle(q,434,5);
	CBrush brBlack(RGB(0, 0, 0));
	pOldBrush=NULL;
	pOldBrush=MyDC->SelectObject(&brBlack);
	//CPen penBlack(PS_SOLID, 5, RGB(0,0,0));//Black color
	pOldPen=NULL;
	pOldPen=MyDC->SelectObject(&penBlack);
	MyDC->MoveTo(r,434);
	MyDC->AngleArc(q,434,5,0,360);
	MyDC->FloodFill(q,434,RGB(0,0,0));
	//circle(r,434,5);
	MyDC->AngleArc(r,434,5,0,360);
	pDC->BitBlt(j,k,Size.cx,Size.cy,MyDC,0,0,SRCCOPY);
	MyDC->SelectObject(pOldPen);
	MyDC->SelectObject(pOldBrush);
	MyDC->SelectObject(pOldMap);
	XMap.DeleteObject();
	MyDC->DeleteDC();

}


void CAnimationCarView::OnDraw(CDC* pDC)
{
	CAnimationCarDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CBitmap XMap,*pOldMap;
	CRect rc;
    GetClientRect(&rc);
	XMap.CreateCompatibleBitmap(pDC,rc.Width(), rc.Height());
	CDC WorkDC;
	CDC *MyDC=&WorkDC;
	MyDC->CreateCompatibleDC(pDC);
	pOldMap=MyDC->SelectObject(&XMap);
	road(MyDC);
	mountain(MyDC);
	stationary_car(MyDC);
	pDC->BitBlt(0, 0, rc.Width(), rc.Height(), MyDC, 0, 0, SRCCOPY);
	MyDC->SelectObject(pOldMap);
	XMap.DeleteObject();
	MyDC->DeleteDC();

}

/////////////////////////////////////////////////////////////////////////////
// CAnimationCarView printing

BOOL CAnimationCarView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CAnimationCarView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CAnimationCarView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CAnimationCarView diagnostics

#ifdef _DEBUG
void CAnimationCarView::AssertValid() const
{
	CView::AssertValid();
}

void CAnimationCarView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CAnimationCarDoc* CAnimationCarView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAnimationCarDoc)));
	return (CAnimationCarDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CAnimationCarView message handlers

/*void CTestG1View::mountain(CDC* pDC)
{
	//setcolor(BROWN);
	CPen penBrown(PS_SOLID, 5, RGB(150,75,0));
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&penBrown);
	//line(0,250,700,250);
	pDC->MoveTo(0,250);
	pDC->LineTo(700,250);
	//line(0,250,0,160);
	pDC->MoveTo(0,250);
	pDC->LineTo(0,160);
	//line(0,160,30,200);
	pDC->MoveTo(0,160);
	pDC->LineTo(30,200);
	//line(30,200,80,120);
	pDC->MoveTo(30,200);
	pDC->LineTo(80,120);
    //arc(90,124,30,150,10);
	pDC->AngleArc(90,124,10,30,150);
	//line(99,119,150,180);
	pDC->MoveTo(99,119);
	pDC->LineTo(150,180);
	//line(150,180,220,100);
	pDC->MoveTo(150,180);
	pDC->LineTo(220,100);
	//arc(234,106,30,150,15);
	pDC->AngleArc(234,106,15,30,150);
	//line(248,99,320,200);
	pDC->MoveTo(248,99);
	pDC->LineTo(320,200);
	//line(320,200,370,125);
	pDC->MoveTo(320,200);
	pDC->LineTo(370,125);
	//arc(380,129,30,150,10);
	pDC->AngleArc(380,129,10,30,150);
	//line(389,124,430,180);
	pDC->MoveTo(389,124);
	pDC->LineTo(430,180);
	//line(430,180,505,90);
	pDC->MoveTo(430,180);
	pDC->LineTo(505,90);
	//arc(519,96,30,150,15);
	pDC->AngleArc(519,96,15,30,150);
	//line(533,89,605,200);
	pDC->MoveTo(533,89);
	pDC->LineTo(605,200);
	//line(605,200,700,110);
	pDC->MoveTo(605,200);
	pDC->LineTo(700,170);
	//line(700,170,700,250);
	pDC->MoveTo(700,170);
	pDC->LineTo(700,250);
	CBrush brBrown(RGB(150, 75, 0));
	CBrush* pOldBrush=NULL;
	pOldBrush=pDC->SelectObject(&brBrown);
	pDC->FloodFill(10,245,RGB(150,75,0));
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
}

CTestG1View::CTestG1View()
{
	// TODO: add construction code here
	i=150,j=190,k=145,l=140,m=138,n=195,o=197,p=170,q=148,r=185;
	penGrey.CreatePen(PS_SOLID, 5, RGB(128,128,128));//GREY color
	penLGrey.CreatePen(PS_SOLID,5, RGB(220,220,220));//LGREY color
	penBlack.CreatePen(PS_SOLID, 5, RGB(0,0,0));
	pOldPen=NULL;
	brGrey.CreateSolidBrush(RGB(128, 128, 128));
	brLGrey.CreateSolidBrush(RGB(220,220,220));
	brBlack.CreateSolidBrush(RGB(0, 0, 0));
	pOldBrush=NULL;
	
}

int CTestG1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	//void (*p)(UINT);
	//p=&CTestG1View::OnTimer;
	SetTimer(1,200,NULL);
	// TODO:  Add your specialized creation code here

	return 0;
}    

void CTestG1View::OnTimer(UINT  nIDEvent){
	if(i>0){
	i=i-3;
	Invalidate();
	j=j-3;k=k-3;l=l-3;m=m-3;n=n-3;o=o-3;p=p-3;q=q-3;r=r-3;
	}
}
void CTestG1View::road(CDC* pDC){ 
	CPoint poly6[8]={CPoint(0,400), CPoint(210,400),CPoint(210,440),CPoint(0,440)};
	CPen pen(PS_SOLID, 5, RGB(220,220,220));
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&pen);
	CBrush br(RGB(220, 220, 220));
	CBrush* pOldBrush=NULL;
	pOldBrush=pDC->SelectObject(&br);
	pDC->Polygon(poly6, 4);
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
	}


void CTestG1View::stationary_car(CDC* pDC)
{
	//int i=150,j=190,k=145,l=140,m=138,n=195,o=197,p=170,q=148,r=185;
	//CPen penGrey(PS_SOLID, 5, RGB(128,128,128));//GREY color
	CBitmap XMap,*pOldMap;
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&penGrey);
	SIZE Size;
    Size.cx = GetSystemMetrics(SM_CXSCREEN);
    Size.cy = GetSystemMetrics(SM_CYSCREEN);
	XMap.CreateCompatibleBitmap(pDC,Size.cx,Size.cy);
	CDC WorkDC;
	CDC *MyDC=&WorkDC;
	MyDC->CreateCompatibleDC(pDC);
	pOldMap=MyDC->SelectObject(&XMap);
	//line(i,402,j,402);
	MyDC->MoveTo(i,402);
	MyDC->LineTo(j,402);
	//line(j,415,k,415);
	MyDC->MoveTo(j,415);
	MyDC->LineTo(k,415);
	//line(j,402,j,415);
	MyDC->MoveTo(j,402);
	MyDC->LineTo(j,415);
	//line(k,415,i,402);
	MyDC->MoveTo(k,415);
	MyDC->LineTo(i,402);
	//setfillstyle(SOLID_FILL,6);
	//CBrush brGrey(RGB(128, 128, 128));
	CBrush* pOldBrush=NULL;
	//floodfill(p,408,6);
	//NOTE IF FloodFill done after select object, color mixing would occur 
	pOldBrush=MyDC->SelectObject(&brGrey);
	MyDC->FloodFill(p,408,RGB(128,128,128));
	//line(n,415,o,428);
	MyDC->MoveTo(n,415);
	MyDC->LineTo(o,428);
	//line(l,415,m,428);
	MyDC->MoveTo(l,415);
	MyDC->LineTo(m,428);
	//line(l,415,n,415);
	MyDC->MoveTo(l,415);
	MyDC->LineTo(n,415);
	//line(o,428,m,428);
	MyDC->MoveTo(o,428);
	MyDC->LineTo(m,428);
	//setfillstyle(SOLID_FILL,6);
	//floodfill(p,422,6);
	MyDC->FloodFill(p,422,RGB(128,128,128));
	MyDC->SelectObject(pOldBrush);
	MyDC->SelectObject(pOldPen);
	//Drawing wheels
	//circle(q,434,5);
	CBrush brBlack(RGB(0, 0, 0));
	pOldBrush=NULL;
	pOldBrush=MyDC->SelectObject(&brBlack);
	//CPen penBlack(PS_SOLID, 5, RGB(0,0,0));//Black color
	pOldPen=NULL;
	pOldPen=MyDC->SelectObject(&penBlack);
	MyDC->MoveTo(r,434);
	MyDC->AngleArc(q,434,5,0,360);
	MyDC->FloodFill(q,434,RGB(0,0,0));
	//circle(r,434,5);
	MyDC->AngleArc(r,434,5,0,360);
	pDC->BitBlt(j,k,Size.cx,Size.cy,MyDC,0,0,SRCCOPY);
	MyDC->SelectObject(pOldPen);
	MyDC->SelectObject(pOldBrush);
	MyDC->SelectObject(pOldMap);
	XMap.DeleteObject();
	MyDC->DeleteDC();

}

void CTestG1View::OnDraw(CDC* pDC)
{
	CTestG1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	road(pDC);
	mountain(pDC);
	stationary_car(pDC);
	//moving_car(pDC);
	// TODO: add draw code for native data here
}

  */

BOOL CAnimationCarView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
		//SetTimer(1,200,NULL);
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

int CAnimationCarView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	SetTimer(1,200,NULL);
	// TODO: Add your specialized creation code here
	
	return 0;
}

void CAnimationCarView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(i>0){
	i=i-3;
	Invalidate();
	j=j-3;k=k-3;l=l-3;m=m-3;n=n-3;o=o-3;p=p-3;q=q-3;r=r-3;
	}
	CView::OnTimer(nIDEvent);
}

BOOL CAnimationCarView::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	return TRUE;
	return CView::OnEraseBkgnd(pDC);
}






















//Header file
// AnimationCarView.h : interface of the CAnimationCarView class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_ANIMATIONCARVIEW_H__868E797E_E1BA_48B0_BA06_C84A7591A32B__INCLUDED_)
#define AFX_ANIMATIONCARVIEW_H__868E797E_E1BA_48B0_BA06_C84A7591A32B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class CAnimationCarView : public CView
{
protected: // create from serialization only
	CAnimationCarView();
	DECLARE_DYNCREATE(CAnimationCarView)

// Attributes
public:
	CAnimationCarDoc* GetDocument();

// Operations
public:
 void mountain(CDC*);
 void road(CDC* pDC);
 void stationary_car(CDC* pDC);
 int i,j,k,l,m,n,o,p,q,r;
 CPen penGrey, penLGrey, penBlack;
 CPen *pOldPen;
 CBrush brGrey, brLGrey, brBlack;
 CBrush* pOldBrush;
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAnimationCarView)
	public:
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
	protected:
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CAnimationCarView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CAnimationCarView)
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG  // debug version in AnimationCarView.cpp
inline CAnimationCarDoc* CAnimationCarView::GetDocument()
   { return (CAnimationCarDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_ANIMATIONCARVIEW_H__868E797E_E1BA_48B0_BA06_C84A7591A32B__INCLUDED_)


Kindly guide me.

Zulfi.


Viewing all articles
Browse latest Browse all 15302

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>