IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pb conception


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut Pb conception
    Bonjour,

    j'ai un petit souci de conception et mon problème n'est pas forcemment complexe mais long à expliquer.C'est pourquoi j'ai découpé le problème en morceaux.

    Introduction:
    Mon objectif est d'afficher/modifier dans un controle graphique les differents champs de mes objets.
    Pour cela j'utilise un controle MFC de type EPropCtrl avec une classe IPropertyHost definie de la manière suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class IPropertyHost
    {
    public:
        virtual void GetProperties( EPropList& PropList ) {}
    };
     
    // mon controle graphique (ressemble a un listBox)
    class EPropCtrl
    {
        public:
        SetPropPointer( IPropertyHost* pHost);
    };

    Pratiquement si j'ai une classe simple (class Simple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Simple
    {
    protected:
        int iValue;
    };
    dont je veux afficher/modifier les propriétes je fais la chose suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class SimpleProp : public Simple,
                       public IPropertyHost
    {
    public:
        virtual void     GetProperties( EPropList& PropList )
        {
            PropList.AddPropInt(this,_T("iValue"),&iValue, false);
        }
     
     
     
        IPropertyHost*     GetPropPointer() { return this; }
    protected:
        int iValue;
    };
    Ensuite j'appelle mon controle comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    EPropCtrl  objPropCtrl; // Objet graphique affichant des propriétes
    SimpleProp simpleProp; //Objet SimpleProp
    objPropCtrl.SetPropPointer( simpleProp.GetPropPointer() );
    //JUSQU ICI TOUT VA BIEN ET CA FONCTIONNE

    //----------------------------------------------------------------
    // maintenant considerons les objets suivants B et A encapsulant
    // l'acces a des structures imbriquees

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    typedef struct tagStructB
    {
        int        iSizeB;
        char*    szTextB;
    } StructB;
     
    typedef struct tagStructA
    {
        int        iSizeA;
        char*    szTextA;
        StructB sStructB;
    } StructA;
     
     
    class B
    {
    public:
        B(structB& refStructB) { m_refStructB = refStructB ;}
        int        GetSize() {return m_StructB.iSizeB;}
        char*    GetText() {return m_StructB.szTextB;}
     
    protected:
        structB& m_refStructB;
    };
     
     
    class A
    {
    public:
        A();
        int        GetSize() {return m_StructA.iSizeA;}
        char*    GetText() {return m_StructA.szTextA;}
        B&        GetB() { return m_B; }
     
     
    protected:
        structA m_StructA;
        B        m_B;
    };
     
    Use :
     
    A m_a;
    int iSizeA = m_A.GetSize(); // recupere la valeur du champ de ma structure A
    m_A.GetB().GetSize();
    Si je veux afficher les proprietes avec mon controle graphique et en prenant le modèle précédent

    Je vais vouloir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class BProp: public B,
                 public IPropertyHost
    {
        public:
            virtual void     GetProperties( EPropList& PropList ) { PropList.AddPropInt(this,_T("iSizeB"),&m_refStructB.iSizeB, false);
    PropList.AddPropString(this,_T("szTextB"),&m_refStructB.szTextB, false);
     
            IPropertyHost*     GetPropPointer() { return this; }
    };
     
    class AProp: public A,
                 public IPropertyHost
    {
        public:
            virtual void     GetProperties( EPropList& PropList )
            {
     
    PropList.AddPropInt(this,_T("iSizeA"),&m_StructA.iSizea, false);
    PropList.AddPropString(this,_T("szTextA"),&m_StructA.szTextA, false);
     
    ///////////// PROBLEME /////////////////////
                m_B.GetProperties( PropList );
     
      //En effet je ne peux pas appeler GetProperties car appartient a Bprop et non pas a B
     
     
     
            }
     
     
            IPropertyHost*     GetPropPointer() { return this; }
    };
     
     
     
    EPropCtrl  objPropCtrl; // Objet graphique affichant des propriétes
    AProp        objAProp; //Objet AProp
     
    objPropCtrl.SetPropPointer( objAProp.GetPropPointer() );
    /////////////////// PROBLEME : COmment architecture mon soft
    Pour que je puisse afficher les propriétes de mon objet A ainsi que du B a l'interieur ????

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    En faisant hériter Bprop de Aprop et de B...

    bien sûr, ça sous-entend que le losange d'héritage entre Bprop, Aprop, B et A soit virtuel.. sinon, il risque d'y avoir pas mal de bugs
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut
    Ca veut dire que je pourrais faire quoi dans AProp ?

    virtual void GetProperties( EPropList& PropList )
    {
    PropList.AddPropInt(this,_T("iSizeA"),&m__StructA.iSizeA, false);
    PropList.AddPropString(this,_T("szTextA"),&m__StructA.szTextA, false);
    m_B.GetProperties( PropList ); // <----- CANNOT WORK
    }






    Citation Envoyé par Swoög
    En faisant hériter Bprop de Aprop et de B...

    bien sûr, ça sous-entend que le losange d'héritage entre Bprop, Aprop, B et A soit virtuel.. sinon, il risque d'y avoir pas mal de bugs

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    ça ne modifiera pas Aprop par rapport à ce que tu pouvais faire avec ta structure...

    ça modifiera seulement Bprop
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par Swoög
    ça ne modifiera pas Aprop par rapport à ce que tu pouvais faire avec ta structure...

    ça modifiera seulement Bprop
    Mon probleme est que justement je ne peux pas avoir acces a BProp en derivant juste mon AProp.

    En fait une solution a mon probleme serait de copier/coller mes classes existantes et de reecrire mon Aprop comme contenant un BProp mais je voulais eviter car ca faisait de la reecriture de code pour rien.

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    OK... j'ai relu ton code, et je viens de comprendre ce que tu veux faire...

    pas évident en effet... il faudrait pouvoir affecter un BProp à Aprop.m_B

    bon, oublie ma suggestion alors...

    voyons... le plus simple, je pense, serait de déclarer dans A, m_B comme étant un B* ou un B& et non un B, comme ça le polymorphisme fonctionnera
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

Discussions similaires

  1. [Concept] Métadatas ?
    Par melinda dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 10/11/2004, 11h56
  2. [Concept] Réplication
    Par melinda dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 31/03/2003, 17h29
  3. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 12h16
  4. [Concept] Curseur coté client et curseur coté serveur
    Par freud dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/09/2002, 22h13
  5. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo