mogwai93
Messages postés361Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention19 mars 2015
-
2 août 2007 à 08:40
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
9 août 2007 à 19:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 août 2007 à 19:32
Fond=CreateSolidBrush(...)
à chaque WM_CTLCOLORxxx, c'est une énorme fuite de mémoire.
Faut le créer (1 seule fois !!!) dans le Init() et le delete en sortie.
Faire 2 GetProp() (une des plus lentes fonctions de l'API, à laisser aux interprétés) à chaque message alors que nimporte quelle fenêtre reçoit les messages en rafale, pas bon du tout, mets les valeurs en données membres de la classe.
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 9 août 2007 à 16:13
salut brunews
j'aimerai te dire UP, mais si tu posté un msg c'est quelque chose dans la source ne te plait pas alors peux-tu être explicite.
ps: elle contient les bases pour un debutant.
amicalement
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 août 2007 à 09:32
Je rappelle qu'une source est là comme exemple de code et se doit donc d'être parfaitement fonctionnelle. Les questions sont à mettre sur le forum.
Sera enlevé en soirée.
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 7 août 2007 à 13:37
aardman:
ta classe est loin d'etre terminée.
Odrconcept:
la class est terminée(en gros) donc de base et fonctionelle.
aardman:
sans tenir compte des autres remarques qui t'ont été faites.
Le probleme soulevé par mogwai93 est (a long terme) grave
Odrconcept:
si tu parle des objets HBRUSH et co, ils sont dans le destructeur
aardman:
Une source bancale de plus, cppfrance n'en avait pas vraiment besoin.
Odrconcept:
je l'ai posté justement pour qu'on puisse m'aidé et de plus je n'ai pas trouvé sur le net et sur cppfrance aucune class combobox en api avec changement de couleur
amicalement
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 7 août 2007 à 02:18
Salut,
Content que tu ai reussi, mais ta classe est loin d'etre terminée.
C'est domage que tu te sois uniquement concentré a corriger le probleme qui t'interessais, les couleurs des combobox, sans tenir compte des autres remarques qui t'ont été faites.
Le probleme soulevé par mogwai93 est (a long terme) grave, puisque les objets gdi sont des objets très limitées en nombre dans le systeme.
Une source bancale de plus, cppfrance n'en avait pas vraiment besoin.
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 6 août 2007 à 04:57
Salut a tous la class est terminé(en gros)
vous pouvez noter et critiquer
ps: aardman j'etait obstiné par la fonction Set/GetWindowLong()
ca marche avec Set/GetProp()
Merci à toi
odrconcept
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 5 août 2007 à 12:21
biensur mais g rien trouvé de similaire pouvant recuperer la variable "couleurtext" dans "comboproc" ou bien g loupé la chose
si tu as un lien qui pourai etre similaire
je suis preneur
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 5 août 2007 à 03:11
as tu lu mon post précedent ?
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 5 août 2007 à 01:54
re
encore apres plusieur cherche ca ne marche donc:
pour moi c'est plus un probleme variable static
mais comment le resoudre
je vais essayé avec un tableau [handle][color]
vous allez me dire pas propre mais vue que personne trouve une solution et que je ne trouve pas la soluce
enfin soite, je parviendrai le faire d'une facon ou autre
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 4 août 2007 à 03:58
Salut,
C'est un probleme classique ca, tu n'a pas access aux variables membres dans ta ComboProc car celle-ci est static, il faut donc associer d'une maniere ou d'une autre le pointeur this de ton instance au combo qu'elle a créé, généralement on fais ca avec les apis Set/GetWindowLong() ou Set/GetProp(), il y a des millions d'exemples sur le net.
Maintenant, si tu veux vraiment gagner du temp, lis un bouquin de C++ avant de te lancer dans la prog win32.
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 4 août 2007 à 03:45
aardman
pour deleted les brush c'est pas compliqué
moi g un probleme avec cette class
quand j'assigne une couleur elle change sur tous les combos
g essayé de changer ID_COMBOBOX a chaque construction de la class
toujours le soucis
marche pas meme en deplacent dans public meme soucis
alors si quelqu'un peut corriger cela serai sympa et me ferao gagner du temps
Merci d'avance
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 4 août 2007 à 03:11
j'attends vos corrections
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 4 août 2007 à 02:25
Salut,
Corrige déja les remarques qui t'ont été faites (notamment les brushs que tu détruis pas, c'est surement le pire probleme de ton code), on verra le reste ensuite.
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 4 août 2007 à 01:23
tu as l'air connaitre pourquoi tu ne donne pas un exemple sur ma source, cela serai plus constructif qu'un message qui me rapporte en rien
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 août 2007 à 17:09
Salut,
C'est ptet ca le probleme, quand on est debutant en C, on se lance pas directement dans du C++/Win32 ?
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 3 août 2007 à 15:30
slt
je ne vois pas comment je pourrai faire
si vous avez un exemple, ca me ferai plaisir.
ps: sorry d'etre debutant en C
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 3 août 2007 à 11:21
Mogwai ne t'a pas dit de le mettre en static, il faut que ça soit un membre de classe. Là quand tu changes la couleur ça le change pour tous les contrôles, forcément.
Pour l'indentifiant, ça ne joue pas puisque tu utilise le HDC fourni par le message.
[Au fait ça serait bien de mettre la source à jour parce que là il y a toujours les problèmes de fuite...]
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 2 août 2007 à 15:08
mogwai93
Messages postés361Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention19 mars 2015 2 août 2007 à 14:56
j'avais pas vu que "COLORREF ColorText, BckGrdText;" etait declaré en variables globales !!
il faut que tu declares ces 2 variables dans combobox
car elles sont propres à cet objet !
Odrconcept
Messages postés51Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 9 août 20071 2 août 2007 à 14:45
re:
il faut que tu passes en parametre un identifiant different
ou gerer un identifiant qui s'incremente à chaque nouvelle creation !
ID_COMBOBOX change bien mais toujour le meme souci. Tous les combobox changent de couleurs.
Si vous pouvez montrer un exemple, ca me ferait plaisir lol :)
mogwai93
Messages postés361Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention19 mars 2015 2 août 2007 à 08:44
tant que j'y suis :
tu as une fuite de mémoire à cet endroit (à tous les endroits où ce code est présent) :
Fond=CreateSolidBrush(BckGrdText);
return (BOOL) Fond;
> dans la creation de ton objet combobox
tu crees ta couleur : Fond=CreateSolidBrush(BckGrdText);
et dans le destructeur, tu supprimes la couleur !
mogwai93
Messages postés361Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention19 mars 2015 2 août 2007 à 08:40
"seul souci quand je change la couleur(SetTextColor), j'ai tous les combobox changent de couleurs
si vous avez une solution, je suis preneur."
tes combobox ont le meme identifiant.... (ici ID_COMBOBOX)
il faut que tu passes en parametre un identifiant different
ou gerer un identifiant qui s'incremente à chaque nouvelle creation !
pour le code, c'est ici :
cbohWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "COMBOBOX", "", dwStyle, 10, 10, 150, 100, Phwnd, (HMENU)ID_COMBOBOX, FirstInstance, NULL);
9 août 2007 à 19:32
à chaque WM_CTLCOLORxxx, c'est une énorme fuite de mémoire.
Faut le créer (1 seule fois !!!) dans le Init() et le delete en sortie.
Faire 2 GetProp() (une des plus lentes fonctions de l'API, à laisser aux interprétés) à chaque message alors que nimporte quelle fenêtre reçoit les messages en rafale, pas bon du tout, mets les valeurs en données membres de la classe.
9 août 2007 à 16:13
j'aimerai te dire UP, mais si tu posté un msg c'est quelque chose dans la source ne te plait pas alors peux-tu être explicite.
ps: elle contient les bases pour un debutant.
amicalement
9 août 2007 à 09:32
Sera enlevé en soirée.
7 août 2007 à 13:37
ta classe est loin d'etre terminée.
Odrconcept:
la class est terminée(en gros) donc de base et fonctionelle.
aardman:
sans tenir compte des autres remarques qui t'ont été faites.
Le probleme soulevé par mogwai93 est (a long terme) grave
Odrconcept:
si tu parle des objets HBRUSH et co, ils sont dans le destructeur
aardman:
Une source bancale de plus, cppfrance n'en avait pas vraiment besoin.
Odrconcept:
je l'ai posté justement pour qu'on puisse m'aidé et de plus je n'ai pas trouvé sur le net et sur cppfrance aucune class combobox en api avec changement de couleur
amicalement
7 août 2007 à 02:18
Content que tu ai reussi, mais ta classe est loin d'etre terminée.
C'est domage que tu te sois uniquement concentré a corriger le probleme qui t'interessais, les couleurs des combobox, sans tenir compte des autres remarques qui t'ont été faites.
Le probleme soulevé par mogwai93 est (a long terme) grave, puisque les objets gdi sont des objets très limitées en nombre dans le systeme.
Une source bancale de plus, cppfrance n'en avait pas vraiment besoin.
6 août 2007 à 04:57
vous pouvez noter et critiquer
ps: aardman j'etait obstiné par la fonction Set/GetWindowLong()
ca marche avec Set/GetProp()
Merci à toi
odrconcept
5 août 2007 à 12:21
si tu as un lien qui pourai etre similaire
je suis preneur
5 août 2007 à 03:11
5 août 2007 à 01:54
encore apres plusieur cherche ca ne marche donc:
pour moi c'est plus un probleme variable static
mais comment le resoudre
je vais essayé avec un tableau [handle][color]
vous allez me dire pas propre mais vue que personne trouve une solution et que je ne trouve pas la soluce
enfin soite, je parviendrai le faire d'une facon ou autre
4 août 2007 à 03:58
C'est un probleme classique ca, tu n'a pas access aux variables membres dans ta ComboProc car celle-ci est static, il faut donc associer d'une maniere ou d'une autre le pointeur this de ton instance au combo qu'elle a créé, généralement on fais ca avec les apis Set/GetWindowLong() ou Set/GetProp(), il y a des millions d'exemples sur le net.
Maintenant, si tu veux vraiment gagner du temp, lis un bouquin de C++ avant de te lancer dans la prog win32.
4 août 2007 à 03:45
pour deleted les brush c'est pas compliqué
moi g un probleme avec cette class
quand j'assigne une couleur elle change sur tous les combos
g essayé de changer ID_COMBOBOX a chaque construction de la class
toujours le soucis
g essayé
****** combobox.h ********
class Combobox
{
private:
COLORREF ColorText, BckGrdText;
public:
....
}
marche pas meme en deplacent dans public meme soucis
alors si quelqu'un peut corriger cela serai sympa et me ferao gagner du temps
Merci d'avance
4 août 2007 à 03:11
4 août 2007 à 02:25
Corrige déja les remarques qui t'ont été faites (notamment les brushs que tu détruis pas, c'est surement le pire probleme de ton code), on verra le reste ensuite.
4 août 2007 à 01:23
3 août 2007 à 17:09
C'est ptet ca le probleme, quand on est debutant en C, on se lance pas directement dans du C++/Win32 ?
3 août 2007 à 15:30
je ne vois pas comment je pourrai faire
si vous avez un exemple, ca me ferai plaisir.
ps: sorry d'etre debutant en C
3 août 2007 à 11:21
Pour l'indentifiant, ça ne joue pas puisque tu utilise le HDC fourni par le message.
[Au fait ça serait bien de mettre la source à jour parce que là il y a toujours les problèmes de fuite...]
2 août 2007 à 15:08
voile ce qui est fait
****** combobox.cpp ********
COLORREF Combobox::ColorText, Combobox::BckGrdText;
****** combobox.h ********
static COLORREF ColorText, BckGrdText;
mais rien a faire marche pas, meme souci
2 août 2007 à 14:56
il faut que tu declares ces 2 variables dans combobox
car elles sont propres à cet objet !
2 août 2007 à 14:45
il faut que tu passes en parametre un identifiant different
ou gerer un identifiant qui s'incremente à chaque nouvelle creation !
ID_COMBOBOX change bien mais toujour le meme souci. Tous les combobox changent de couleurs.
Si vous pouvez montrer un exemple, ca me ferait plaisir lol :)
ps:J'ai cherché un peu partout sur le net.
****** combobox.cpp ********
#define ID_COMBOBOX 100
int rr; //variable de teste
Combobox::Combobox() //constructeur
{rr=(int)ID_COMBOBOX;}
void Combobox::Init( HWND Phwnd , HINSTANCE FirstInstance,unsigned long dwStyle)
{
rr=rr + 1; //variable de teste d'incrementation pour ID_COMBOBOX
#define ID_COMBOBOX rr
cbohWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "COMBOBOX", "", dwStyle, 10, 10, 150, 100, Phwnd, (HMENU)ID_COMBOBOX, FirstInstance, NULL);
...
}
2 août 2007 à 08:44
tu as une fuite de mémoire à cet endroit (à tous les endroits où ce code est présent) :
Fond=CreateSolidBrush(BckGrdText);
return (BOOL) Fond;
> dans la creation de ton objet combobox
tu crees ta couleur : Fond=CreateSolidBrush(BckGrdText);
et dans le destructeur, tu supprimes la couleur !
2 août 2007 à 08:40
si vous avez une solution, je suis preneur."
tes combobox ont le meme identifiant.... (ici ID_COMBOBOX)
il faut que tu passes en parametre un identifiant different
ou gerer un identifiant qui s'incremente à chaque nouvelle creation !
pour le code, c'est ici :
cbohWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "COMBOBOX", "", dwStyle, 10, 10, 150, 100, Phwnd, (HMENU)ID_COMBOBOX, FirstInstance, NULL);