Combiner des styles d'objet

Résolu
Signaler
Messages postés
46
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
16 avril 2009
-
Messages postés
46
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
16 avril 2009
-
hello tout le monde !
Trouver le titre du sujet m'a déjà posé des problèmes, alors j'espère pouvoir être clair. 
j'aimerai pouvoir gérer le style de mes objets par des #define et ainsi combiné différents styles
exemple qui ne fonctionne pas terrible :

// MODE
#define MA_HORIZ   0x0000
#define MA_VERTI   0x0002
#define MA_HORIZ_ADAPT  0x0003
#define MA_VERTI_ADAPT  0x0004
#define MA_LISTE_GEREE  0x0010
#define MA_LISTE_NON_GEREE 0x0020

class MonObjet : public CObject
{
   //création destruction et plein de fonctions....dont
   // l'objet se dessine tout seul dans la zone rect d'un pDC
   void dessine(CDC* pDC, CRect rect, DWORD le_fameux_style)
   {
      switch(le_fameux_style)
      {
         case MA_HORIZ: pDC->Ellipse(rect);
         case MA_LISTE_GEREE://il dessine autre chose
         //etc...
      }
      //####### OU
      if(le_fameux_style&MA_HORIZ)pDC->Ellipse(rect);
      if(le_fameux_style&MA_LISTE_GEREE)://....
      //etc...
      
   };
}
je voudrais donc que MonObjet se dessine en MA_HORIZ et ou sans MA_LISTE_GEREE
sans devoir gérer toutes les combinaisons dans la class
par un simple

MonObjet* obj;
obj = new MonObjet();
obj->dessine(pDC, rect, (MA_HORIZ | MA_LISTE_GEREE));
ou
obj->dessine(pDC, rect, (MA_VERTI | MA_LISTE_NON_GEREE));

mais voilà.... ça ne fonctionne pas
est-ce les define, la procédure switch ou if, l'appel
si quelqu'un pouvait m'aider ?
merci

saibe

7 réponses

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Salut Saibe,

tu as pensé à utiliser un masque ?
if(le_fameux_style & MA_HORIZ) { blablabla;}
if(le_fameux_style & MA_VERTI) { blablabla;}
etc...

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
case MA_HORIZ:
  pDC->Ellipse(rect);
  break; // MANQUANT

ciao...
BruNews, MVP VC++
Messages postés
46
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
16 avril 2009

Hello BruNews.
en effet, je n'ai pas mis de 'break' pour ne pas casser le 'switch';
car il faut pouvoir vérifier tous les 'case'
si je 'break' un 'case' je sors du 'switch' non ?

saibe
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Il faut 'break' pour sortir du 'switch' sinon on continue l'exécution à la ligne en dessous.

ciao...
BruNews, MVP VC++
Messages postés
46
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
16 avril 2009

hello !


et merci pour vos réponses;
en effet j'ai opté pour le if avec masque
c'est ce qui convenait le mieux pour mon objet; même si j'aurais préféré un switch plus lisible....
et j'avais pas mis de 'break' pour justement passer à la ligne du dessous.... mais le switch ne masque po et ne gère donc po les combinaisons....

merci encore

saibe
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Je suis tout à fait d'accord que les if ne sont pas des plus lisibles, mais il faut bien avouer que les masques sont quand même très très pratiques.
Bon courage pour la suite.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
46
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
16 avril 2009

les masques sont essentiels !!!


et justement j'avais comis une petite erreur  (c pour ca que ça ne fonctionnait pas)


masque &= !UN_STYLE_A_ENLEVE;
au lieu de
masque &= ~UN_STYLE_A_ENLEVE;

je suis bête


a+
saibe