cs_tdeco
Messages postés53Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention27 mai 2005
-
25 déc. 2004 à 04:31
cs_tdeco
Messages postés53Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention27 mai 2005
-
26 déc. 2004 à 20:09
Bonjour
En fait, j'ai une boite de dialogue avec plusieurs boutons et une zone ou j'affiche une image bmp. Pour afficher l'image, je procède par la façon suivante:
HWND hBouton = GetDlgItem(hDlg_IHM_MAIN, IDC_IMAGE);
HDC hdc = GetDC(hBouton);
Dessiner_Image(hDlg_IHM_MAIN,hdc,&buffer);
ReleaseDC(hDlg_IHM_MAIN,hdc);
hDlg_IHM_MAIN est ma boite de dialogue principale,
IDC_IMAGE l'identifiant de ma zone d'affichage
Dans la fonction "Dessiner_Image" , j'utilise StretchBlt pour dessiner l'image dans le buffer.
Mon image s'affiche bien. J'appuis sur un bouton de l'IHM, je crée alors une autre boite de dialogue. Lorsque je ferme celle-ci , mon image s'est effacé
cs_tdeco
Messages postés53Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention27 mai 2005 25 déc. 2004 à 17:28
Le pb c'est que l'affiche de l'image est commandé par un thread extérieur à la boite de dialogue. Par défaut, au démarrage de l'application, le prog exécute le Cas WM_PAINT ,je px pas placer mon affichage ici, car au début, il n'y a rien dans mon buffer pour l'instant
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 25 déc. 2004 à 20:23
Dans ton buffer, il y a koi exactement ? Le chemin de l'image a charger ?
Dans ce cas la, il te suffit de placer 'buffer' en variable global, de modifier son contenu dans ton thread, pis de le charger automatiquement dans ton WM_PAINT, et dans le cas ou la chaine est vide, il te suffit de poser une condition (if (!buffer[0]) ne pas appeler la fonction) a la reception du msg, ou bien de faire ca dans ta fonction :
BOOL CALLBACK DlgProc(..)
{
...
case WM_PAINT:
...
//Si tu places la condition a la reception du msg (ce ke je te conseille)
if (buffer[0]) Dessiner_Image(hDlg_IHM_MAIN,hdc,&buffer);
...
}
//Dans le cas ou tu veux placer la condition dans la fonction (ne fais pas ca a mon avis, ca t'evite un appel a une fonction inutil)
int Dessiner_Image(...)
{
...
if (!buffer[0]) return 0;
...
}
cs_tdeco
Messages postés53Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention27 mai 2005 26 déc. 2004 à 20:09
Merci de ta réponse, mais cela ne marche toujours pas.
En fait buffer c'est l'image bmp (pixels) ke j'ai stocké auparavant.
Comme tu le conseilles, j'ai ma fonction dessiner dans le cas WM_PAINT, et j'envois un message à l'IHM cycliquement à partir de mon thread, mais l'image s'efface toujours lorsque je clique sur un bouton. Cela vient peut etre de ma fonction dessiner elle-meme?
Voici le code:
case WM_PAINT:
IHM_PaintDialog(hDlg);
HWND hBouton = GetDlgItem(hDlg_IHM_MAIN, IDC_IMAGE);
HDC hdc = GetDC(hBouton);
Dessiner_Image(hDlg_IHM_MAIN,hdc,&buffer);
ReleaseDC(hDlg_IHM_MAIN,hdc);
break;