Designfrage: MFC-Dialogfeldanwendung



  • Ich habe eine Dialogfeldanwendung mit MFC erstellt, die zwei PropertyPages
    mit jeweils eigenen Klassen enthält.
    Ferner gibt es eine Klasse "Foo", in der meine Daten verwaltet werden
    und auf die sowohl die Hauptdialogfeldklasse als auch beide Klassen der PropertyPages vollen Zugriff haben müssen.
    Wie designe ich das am besten?
    Dankeschöne für Mühen und Antworten 🙂
    Gruß
    E-the-Real



  • zB so:

    dialog_1 und dialog_2 haben jeweils die mebervariable Foo* m_poFoo;

    in Foo:

    CDialog_1* poDialog_1 = new CDialog_1();
    poDialog_1->m_poFoo = this;
    CDialog_2* poDialog_2 = new CDialog_2();
    poDialog_1->m_poFoo = this;
    

    du kannst den pointer auch im view oder von woanders zuweissen.

    alternativ kannstes noch ueber einen theApp-pointer machen.

    Esco



  • CDialog_1* poDialog_1 = new CDialog_1();
    poDialog_1->m_poFoo = this;
    CDialog_2* poDialog_2 = new CDialog_2();
    poDialog_1->m_poFoo = this;
    

    Der untere Zeiger heisst doch bestimmt poDialog_2, oder?

    edit: Schmarn geschrieben 🙄

    Also in der Foo-Klasse werden zwei Zeiger der Dialogfelder auf Foo initialisiert... hmmm, das heisst, ich müsste für jede Klasse, die Foo benutzt, in Foo die Zeiger initialisieren.
    Das gefällt mir nicht so gut, da Foo eigentlich eine Klasse sein soll, die unabhängig von den anderen Klassen verwendet werden kann, also man sollte in der Klasse nichts extra anpassen müssen.
    Bei Doc/View würde man die Instanz der Klasse in der Doc-Klasse erstellen und dann in den anderen Klassen über GetDocument() auf das Objekt zugreifen.
    Gibt es dazu eine analoge Möglichkeit in DlgFeldern?
    Wie meintest du deine Idee mit theApp?
    Gruß



  • Du hast ja ein globales Objekt theApp. Über dieses kannst du theoretisch jede Kommunikation realisieren.



  • deklariere einfach die Variable in der Applikationsklasse und hole dir mit

    CDeineApp* pApp = (CDeineApp*) AfxGetApp();
    

    einen Zeiger auf die Klasse



  • Ahja, got it...
    ich staune immer wieder über dieses merkwürdige MFC-Klassenparadigma:
    Einerseits ist jede Kleinigkeit als Klasse gekapselt, andererseits gibt's globale Objekte... 🙄 zerstört sich imho an manchen Stellen selbst, aber das wird OT.
    Thx & Gruß
    E-the-Real



  • ethereal schrieb:

    Ahja, got it...
    ich staune immer wieder über dieses merkwürdige MFC-Klassenparadigma:
    Einerseits ist jede Kleinigkeit als Klasse gekapselt, andererseits gibt's globale Objekte... 🙄 zerstört sich imho an manchen Stellen selbst, aber das wird OT.
    Thx & Gruß
    E-the-Real

    the App ist nicht wirklich global. du musst es jedesmal (zumindest in der 5er) einbinden.
    das ist nix MFC-spezifisches, das problem haste ja immer. du kannst das auch umgehen, indem du zB in theApp oder woanders einzelne pakete mit pointern auf andere objekte zusammenstellst und diese dann trotz einbinden nur 'friend-klassen' zur verfuegung stellst.

    Esco


Log in to reply