Combiner des styles d'objet

Résolu
saibe Messages postés 46 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 16 avril 2009 - 15 sept. 2006 à 20:53
saibe Messages postés 46 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 16 avril 2009 - 18 sept. 2006 à 17:04
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

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
16 sept. 2006 à 07:51
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 !"
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
15 sept. 2006 à 22:35
case MA_HORIZ:
  pDC->Ellipse(rect);
  break; // MANQUANT

ciao...
BruNews, MVP VC++
0
saibe Messages postés 46 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 16 avril 2009
16 sept. 2006 à 06:02
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
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
16 sept. 2006 à 10:24
Il faut 'break' pour sortir du 'switch' sinon on continue l'exécution à la ligne en dessous.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
saibe Messages postés 46 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 16 avril 2009
16 sept. 2006 à 15:30
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
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
16 sept. 2006 à 15:34
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 !"
0
saibe Messages postés 46 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 16 avril 2009
18 sept. 2006 à 17:04
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
0
Rejoignez-nous