Hi,
I have done this program in TC. But now I am trying to port this code to VC. I am getting flickering. Earlier I was advised on this forum to use SetTimer instead of for loops for avoiding flickering but still my prob persists.

I have got three functions: road, mountain and stationary_car. These are called from OnDraw(...) method.
I have used the SetTimer concept. But when I am executing this program, its producing lots of
flickering. Kindly somebody help me plz. I am using VS2005 under XP.

Zulfi.


Code:
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::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
}
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
	CPen* pOldPen=NULL;
	pOldPen=pDC->SelectObject(&penGrey);
	//line(i,402,j,402);
	pDC->MoveTo(i,402);
	pDC->LineTo(j,402);
	//line(j,415,k,415);
	pDC->MoveTo(j,415);
	pDC->LineTo(k,415);
	//line(j,402,j,415);
	pDC->MoveTo(j,402);
	pDC->LineTo(j,415);
	//line(k,415,i,402);
	pDC->MoveTo(k,415);
	pDC->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=pDC->SelectObject(&brGrey);
	pDC->FloodFill(p,408,RGB(128,128,128));
	//line(n,415,o,428);
	pDC->MoveTo(n,415);
	pDC->LineTo(o,428);
	//line(l,415,m,428);
	pDC->MoveTo(l,415);
	pDC->LineTo(m,428);
	//line(l,415,n,415);
	pDC->MoveTo(l,415);
	pDC->LineTo(n,415);
	//line(o,428,m,428);
	pDC->MoveTo(o,428);
	pDC->LineTo(m,428);
	//setfillstyle(SOLID_FILL,6);
	//floodfill(p,422,6);
	pDC->FloodFill(p,422,RGB(128,128,128));
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
	//Drawing wheels
	//circle(q,434,5);
	CBrush brBlack(RGB(0, 0, 0));
	pOldBrush=NULL;
	pOldBrush=pDC->SelectObject(&brBlack);
	//CPen penBlack(PS_SOLID, 5, RGB(0,0,0));//Black color
	pOldPen=NULL;
	pOldPen=pDC->SelectObject(&penBlack);
	pDC->MoveTo(r,434);
	pDC->AngleArc(q,434,5,0,360);
	pDC->FloodFill(q,434,RGB(0,0,0));
	//circle(r,434,5);
	pDC->AngleArc(r,434,5,0,360);
	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
	
}

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



/ TestG1View.h : interface of the CTestG1View class
//


#pragma once


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

// Attributes
	int i,j,k,l,m,n,o,p,q,r;
	CPen penGrey, penLGrey, penBlack, *pOldPen;
    CBrush brGrey, brLGrey, *pOldBrush, brBlack;
public:
	CTestG1Doc* GetDocument() const;

// Operations
	void road(CDC*);
	void stationary_car(CDC*);
	void mountain(CDC*);
	
public:

// Overrides
public:
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

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

protected:

// Generated message map functions
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnTimer( UINT nIDEvent );
protected:
	DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG  // debug version in TestG1View.cpp
inline CTestG1Doc* CTestG1View::GetDocument() const
   { return reinterpret_cast<CTestG1Doc*>(m_pDocument); }
#endif