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