CLASS COMBOBOX (API) DEV-C++ V4.9.9.2 ET VC++6

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 2 août 2007 à 08:40
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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.

https://codes-sources.commentcamarche.net/source/43636-class-combobox-api-dev-c-v4-9-9-2-et-vc-6

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
5 août 2007 à 03:11
as tu lu mon post précedent ?
Odrconcept Messages postés 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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

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
Odrconcept Messages postés 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
4 août 2007 à 03:11
j'attends vos corrections
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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és 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
2 août 2007 à 15:08
re mogwai93

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
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
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és 51 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 9 août 2007 1
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 :)

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);
...
}
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
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és 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
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);
Rejoignez-nous