Gord21_cs
Messages postés20Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention27 mai 2008
-
25 mai 2004 à 12:57
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
9 juin 2004 à 11:12
Je souhaite créer une fenetre dans laquelle je positionne des images que je numérote IDC_Image_1, IDC_Image_2, ..., IDC_Image_n.
Est-il possible de créer dans mon code une boucle du type :
For (i=1, i<=n, i++)
{
IDC_Image_i.SetWindowPos(...);
}
dans lequel, i est une variable qui me permettra de modifier les propriétés de chaque image.
Gord21_cs
Messages postés20Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention27 mai 2008 26 mai 2004 à 12:20
Merci.
J'ai essayé de mettre (m_Image_1+i) mais l'image perd alors ses propriétés de structure. Comme je débute, c'est peut-être ma facon de faire qui ne va pas.
Je crée une fenetre IDD_FENETRE_DIALOG sur laquelle je positionne des images à la main (ID=IDC_IMAGE_1 (puis 2, 3, ...), TYPE=BITMAP, STYLE=NOTIFY).
Ensuite, à chaque image, j'ajoute une fonction BN_CLICKED ainsi qu'une variable m_IMAGE_1 CATEGORY=CONTROL, TYPE=CSTATIC.
Mon objectif est alors de pouvoir gérer les propriétés de chaque image à partir de mon code (dans des boucles ou dans des procédures).
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 26 mai 2004 à 15:43
c'est possible, mais sans utiliser le classwizard.
Dans le .h de la classe, tu défini un tableau de CStatic (dans la zone DialogData, mais en dehors des balises AFX_DIALOG8DATA. :
CStatic m_aImages[IMAGE_COUNT];
IMAGE_COUNT est une constante indiquant le nb d'image.
Ds la fct DoDataExcange, il faut faire le lien entre les Id et les mebres du tableau (en dehors des balise AFX_... également ) :
DDX_Control(pDX, IDC_IMAGES_0, m_aImages[0]);
...
ensuite, dans ton code du peus faire une boucle sur les images.
dans le resource.h", édite-le à la main pour que les Id des images se suivent.
Gord21_cs
Messages postés20Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention27 mai 2008 27 mai 2004 à 12:15
Merci pour ton aide. J'ai essayé et ça ne pose pas de pb pendant la compilation. Par contre, lorsque j'execute le .exe, j'ai le message d'ereur suivant "Debug Assertion Failed". Sais tu d'où ça peux venir ?
Quel est la différence entre déclarer en dehors et en dedans des balises AFX_DIALOG8DATA ?
Merci
d.rogo :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 27 mai 2004 à 20:48
Je ne comprend pas trop l'erreur, mais je crois que tu peut pas retourner directement un CStatic dans une fonction ,faut retourner soit une référrence soit un pointeur.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 27 mai 2004 à 20:52
déclarer en dehors des balises AFX_DIALOG8DATA évite au classwizard du visual Studio de dire qu'il y a une erreur (en fait il n'y en a pas mais il ne reconnait pas les variables stockées dans des tableaux).
En ce qui concerne le Debug Asseertion Failed, normalement il t'indique le fichier et la ligne de l'erreur. Donne-moi le code autour (si c'est un fichier core de MFC, donne simplement son nom et sa ligne)
Gord21_cs
Messages postés20Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention27 mai 2008 1 juin 2004 à 12:20
Merci, J'ai réussi à corriger le Debug Assertion Failed (une faute de frappe).
Par contre, je souhaiterai charger un Bitmap à partir d'un autre Bitmap en modifiant sa taille et son origine (c'est à dire la position du coin supérieur gauche) = prélever un échantillon d'une image.
Pour cela, je pensais utiliser la fonction :
StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, unsigned long).
Mon problème est que la fonction Image_1.GetBitmap() retourne un HBITMAP et non un HDC (idem pour SetBitmap()).
Comment résoudre ce problème ?
(Quelle fonction retourne un HDC ou quelle fonction pourrait remplacer StretchBlt).
Gord21_cs
Messages postés20Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention27 mai 2008 8 juin 2004 à 12:42
Merci,
J'ai essayé, il n'y a pas de problème à la compilation excepté
HDC hdc = GetDC(NULL); que j'ai remplacé par
HDC hdc = NULL;
Par contre, je n'arrive pas à utiliser les fonction GetBitmap() et SetBitmap par la suite.
Donc j'ai modifié mon programme en remplaçant le type des images par FRAME (au lieu de BITMAP) et j'affiche directement mes Bitmap dedans :
Cette fonction est appelée lorsque je clique sur un bouton. Au premier clic, il ne se passe rien, par contre au deuxième, mon image source va bien dans mon image destination.
J'ai essayé de corriger ce problème en ajoutant un Invalidate() mais ça ne change rien.
Comment faire pour que l'affichage soit correct du premier coup ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 9 juin 2004 à 11:12
alors là je vois pas. le invalidate, tu le fais bien sur l'image dest ?
essaye de le faire sur le dialogue . Tu peut aussi essayer en mettant UpdateWindow juste après e Invalidate