1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| void CDathsProPaintView::OnDraw(CDC* pDC)
{
CDathsProPaintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO : ajoutez ici le code de dessin pour les données natives
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
int i = 0, code = -1;
POINT current = {0, 0}, prev = {0, 0};
CPen crayon(PS_SOLID, 3, RGB(0,0,0));
pDC->SelectObject(&crayon);
pDC->SelectStockObject(NULL_BRUSH);
for(i = 0; i <= pDoc->m_NbPts; i++)
{
if(i == 0) //il n'a aucune valeur, donc premier passage dans la boucle
{
prev = pDoc->m_Tableau.GetPointAtIndex(i); //m_Tableau est une variable de type STab
current = prev;
pDC->MoveTo(current);
}
else
{
prev = current;
current = pDoc->m_Tableau.GetPointAtIndex(i);
}
if(current.x >= 0 && prev.x >= 0) //si les points sont valides
{
switch(pDoc->m_Tableau.GetCodeAtIndex(i))
{
case 0: //traitement du free-hand
//----//-----------------------------------------------------------
if(code == 0)
{//le dernier point est aussi de code 0
pDC->LineTo(current);
}
else
{//trace un point unique
pDC->MoveTo(current.x - 1, current.y - 1);
pDC->LineTo(current);
code = 0; //on met le code pour le prochain passage
}
break;
case 1: //traitement de line
//----//-----------------------------------------------------------
if(code == 1)
{//le dernier point est aussi de code 1
pDC->LineTo(current);
code = -1;
}
else
{
code = 1; //on met le code pour le prochain passage
}
break;
case 2: //traitement de square
//----//-----------------------------------------------------------
if(code == 2)
{//le dernier point est aussi de code 2
pDC->Rectangle(prev.x, prev.y, current.x, current.y);
code = -1;
}
else
{
code = 2; //on met le code pour le prochain passage
}
break;
case 3: //traitement de cercle
//----//-----------------------------------------------------------
if(code == 3)
{//le dernier point est aussi de code 3
pDC->Ellipse(prev.x, prev.y, current.x, current.y);
code = -1;
}
else
{
code = 3; //on met le code pour le prochain passage
}
break;
}// fin de: [ switch() ]
pDC->MoveTo(current); //réinitialise notre point d'ancrage
}//fin de: [ if(current.x >= 0 && prev.x >= 0) ]
}//fin de: [ for() ]
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
} |