Redimenssion de fenêtre et permanence de son contenu (V C++)

TahitiLove Messages postés 19 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 25 mars 2005 - 14 mai 2004 à 10:31
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 14 mai 2004 à 11:18
Bonjour,

J'aimerai savoir comment peut on assurer la permanence du contenu d'une fenêtre.
Je m'explique, j'ai créer un projet sous Visual C++ utilisant le MFC (juste pour préciser) qui me permet d'afficher des images puis de les traiter. L'affichage de l'image marche nickel. Par contre, j'ai créer un fonction de calculer et d'afficher son histogramme. Il s'affiche bien à l'endroit que je lui est indiquer. Hélas dés que je touche à la fenêtre, que je la redimensionne ou que je passe sur une autre fenêtre, le dessin de l'histogramme disparait instantanément. Comment puis-je faire en sorte qu'il s'affiche tout le temps.
De plus, j'aimerai aussi savoir comment peut-on récuperer les tailles de la fenêtre pour afficher ce dessin relativement au dimensions de la fenêtre (toujours au centre par exmple).
Je vous colle un bout du code correspondant en espérant que quelqu'un pourra m'aider.

void CMy3View::OnHistogramme()

{

/* Chargement de l'image */

Image *im;

CMy3Doc *pDoc=GetDocument();

if (pDoc->m_dib.m_lpBMIH==NULL)

return;

im=pDoc->m_dib.DibToImage();

/* Calcul de l'histogramme */

double *hist;

long *hist0;

// char *seuil;

char *pics;

int i,nbpic=0;

pics=(char*) malloc (5*sizeof(char));

hist=(double*)malloc(256*sizeof(double));

hist0=Calcul_Histogramme(im);

/* On augmente le contraste dans l'histogramme */

/*for (i=0;i<256;i++)

hist[i]=(double)(hist0[i]*5000)/(double)(im->width*im->height);*/

/* Opération morphologique (Ouverture) sur l'histogramme */

MorphologieHist(hist0);

for (i=0;i<256;i++)

hist[i]=(double)(hist0[i]*5000)/(double)(im->width*im->height);

afficher_hist0(hist,35,330,RGB(255,0,0));

/* Lissation de l'histogramme avec un filtre gaussien */

LissationGaussienne(hist,2);

afficher_hist1(hist,35,330,RGB(0,0,255));

/* Seuillage de l'histogramme */

nbpic=Recherche_Pic(hist,pics);

affiche_hist_pics(hist,35,330,RGB(0,0,255),pics,nbpic);

//seuil=Calcul_Seuil(*hist,*pics);

/* Effacement du buffer image et libération de la mémoire allouer */

delete im;

free(hist);

}

void CMy3View::afficher_hist0(double *hist, int x, int y, COLORREF c)

{

int i,j;

coordonne(x,y,300,300);

for(j=0;j<256;j++)

{

for (i=0;i<(int)(hist[j]);i++)

{

draw_point(j+x,y-i,c);

}

}

}

void CMy3View::afficher_hist1(double *hist, int x, int y, COLORREF c)

{

int j,y1,y2;

coordonne(x,y,300,300);

for(j=1;j<256;j++)

{

y1=y-(int)(hist[j-1]);

y2=y-(int)(hist[j]);

draw_line(j+x-1,y1,j+x,y2,c,1);

}

}

void CMy3View::show(int n,int x,int y)

{

char c[10];

itoa(n,c,10);

CClientDC dc(this);

OnPrepareDC(&dc);

dc.TextOut(x,y,c);

}

void CMy3View::draw_line(int x1,int y1,int x2,int y2,COLORREF c,int size)

{

CClientDC dc(this);

OnPrepareDC(&dc);

CPen crayon(PS_SOLID,size,c);

dc.SelectObject(&crayon);

dc.MoveTo(x1,y1);

dc.LineTo(x2,y2);

}

void CMy3View::draw_point(int x,int y,COLORREF c)

{

CClientDC dc(this);

OnPrepareDC(&dc);

dc.SetPixel(x, y, c);

}

Je n'ai mis que les fonctions que je pense concernées. Alors si quelqu'un à un conseil, je suis preneur.
Merci. :)

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mai 2004 à 10:53
Taille de fenetre: GetWindowRect().
Taille de zone client: GetClientRect().
Dessiner dans WM_PAINT.

ciao...
BruNews, Admin CS, MVP Visual C++
0
TahitiLove Messages postés 19 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 25 mars 2005
14 mai 2004 à 11:15
Ok pour les dimensions.

Mais j'ai pas compris pour le dessin dans WM_PAINT. Est-ce que tu peut préciser stp ??

Merci pour ta réponse.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mai 2004 à 11:18
Regarde dans le sabir MFC a quoi correspond WM_PAINT, peut-etre OnPaint() ou un truc de ce genre.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Rejoignez-nous