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

Signaler
Messages postés
19
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
25 mars 2005
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Taille de fenetre: GetWindowRect().
Taille de zone client: GetClientRect().
Dessiner dans WM_PAINT.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
19
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
25 mars 2005

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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++