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
|
void graphique::OnPaint()
{
int i,j;
int fenetre_x,fenetre_y;
int marge_gauche_x, marge_droite_x,marge_sup_y,marge_inf_y;
int centreX,centreY;
int Xdebut,Ydebut,Xfin,Yfin;
double gx; // grandissement X
double gy; // grandissement Y
CRect rect_ok, rect_cancel, rect_graphique;
CPaintDC dc(this); // device context for painting
double graduation[3]={1,2.5,5};
// TODO: ajoutez ici le code de votre gestionnaire de messages
// N'appelez pas CDialogEx::OnPaint() pour la peinture des messages
marge_gauche_x=15; // la courbe débute à 15 pixels du bord
marge_droite_x=15; // la courbe fini à 15 pixels du bord
marge_sup_y=15; // la courbe débute à 15 pixels du haut
marge_inf_y=30; // la courbe débute à 15 pixels du bas PLUS 15 pixels à cause des boutons
GetClientRect(&rect_graphique); // Position X et Y et dimension dX et dY de la fenetre graphique => X et Y = 0 et dX et dY = dimension de la fenetre
fenetre_x=rect_graphique.right - marge_gauche_x - marge_droite_x; // 30 = bord droit et bord gauche
fenetre_y=rect_graphique.bottom - marge_sup_y - marge_inf_y; // 70 = bord sup et bord inf
// Déplacement des boutons OK et CANCEL
CButton_OK.GetClientRect(&rect_ok);
CButton_CANCEL.GetClientRect(&rect_cancel);
CButton_OK.MoveWindow(rect_graphique.right-rect_cancel.right-rect_ok.right , rect_graphique.bottom-rect_ok.bottom , rect_ok.right, rect_ok.bottom);
CButton_CANCEL.MoveWindow(rect_graphique.right-rect_cancel.right , rect_graphique.bottom-rect_cancel.bottom , rect_cancel.right , rect_cancel.bottom);
// tracé des courbes
for (j=0; j<NbCourbe; j++) // faire chaque courbe j
{
// Noms des courbes
dc.SelectObject(pen[j]);
SetTextColor(dc,couleur[j]);
dc.TextOutW(rect_graphique.right-100, 20+j*20, legendes[j], legendes[j].GetLength() ) ;
for (i=0 ; i<tabN ; i++ ) // faire chacun point i de la courbe j
{
if(tableau[i][0][j] < axe[0][0])axe[0][0]=tableau[i][0][j];
if(tableau[i][0][j] > axe[0][1])axe[0][1]=tableau[i][0][j];
if(tableau[i][1][j] < axe[1][0])axe[1][0]=tableau[i][1][j];
if(tableau[i][1][j] > axe[1][1])axe[1][1]=tableau[i][1][j];
gx = (double)(fenetre_x - marge_gauche_x - marge_droite_x) / (abs(axe[0][0]) + abs(axe[0][1])); // grandissement X
gy = (double)(fenetre_y - marge_sup_y - marge_inf_y ) / (abs(axe[1][0]) + abs(axe[1][1])); // grandissement Y
centreX = marge_gauche_x + (int)(abs(axe[0][0]) * gx); // Position X du centre de l'axe OX OY
centreY = marge_sup_y + (int)(abs(axe[1][1]) * gy); // Position Y du centre de l'axe OX OY
Xfin = (centreX + (int)(tableau[i][0][j] * gx));
Yfin= (centreY - (int)(tableau[i][1][j] * gy));
// tracé des axes
dc.MoveTo(marge_gauche_x,centreY);
dc.LineTo((fenetre_x - marge_droite_x),centreY);
dc.MoveTo(centreX,(fenetre_y - marge_inf_y));
dc.LineTo(centreX,marge_sup_y);
// Noms des axes
dc.TextOutW(centreX , marge_sup_y , titres[0], titres[0].GetLength() ) ;
dc.TextOutW(rect_graphique.right-titres[1].GetLength()*10 , centreY, titres[1], titres[1].GetLength() ) ;
if(i > 0)
{
Xdebut = (centreX + (int)(tableau[i-1][0][j] * gx));
Ydebut = (centreY - (int)(tableau[i-1][1][j] * gy));
}
else
{
Xdebut=Xfin;
Ydebut=Yfin;
}
dc.MoveTo(Xdebut,Ydebut);
dc.LineTo(Xfin,Yfin);
}
}
//PumpWaitingMessages(); // sert à rien
} |
Partager