Hi,
I have developed an animation program in Visual C++ 6.0. When i excute it , it shows me the object moving but it has two problems:
i) The portions which are not filled becomes black
ii) A window is created from the right bottom of screen and slowly completely engulfs the entire screen.
The code is given below:
The header file is:
view.h
Somebody advised me:
Zulfi.
I have developed an animation program in Visual C++ 6.0. When i excute it , it shows me the object moving but it has two problems:
i) The portions which are not filled becomes black
ii) A window is created from the right bottom of screen and slowly completely engulfs the entire screen.
The code is given below:
Rich (BB code):
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);
/*pDC->DPtoLP( rc );
CBrush brBackground( RGB( 255, 255, 100 ) );
pDC->FillRect( rc, &brBackground );*/
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();
}
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);
}
view.h
Rich (BB code):
// 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_)
Somebody advised me:
There is no flickering now but I dont know how to paint the memory DC. Somebody plz guide me how to solve this problem. I have attached the output of program.To get rid of the flickering, handle WM_ERASEBKGND and just return TRUE in it.
To get rid of the black, you need to paint the entire memory DC in the color you want before starting to paint your road etc. You can use FillRect for this.
Zulfi.
Attachments
-
5.2 KB Views: 16