Dialog auf mehrere verteilen



  • Wenn du mit Klassen arbeitest, aber von Klassen und OO nix verstehst,
    würde ich die Bildungslücke mal schliessen...

    Man löst soetwas heute in der Regel so, das man die Daten von der Ansicht
    trennt, und man dann eine zentrale Klasse hat die die Daten bzw. die
    Klassen die die Daten enthalten verwaltet. Diese Klasse ist als Singelton
    implementiert, d.h. es gibt immer nur eine Instanz zur Laufzeit.
    Ob du das nun über mehrere Dialoge oder eine TabCtrl in der Darstellung machst,
    tut sich im Endeffekt fast nix. Für beides wirst du neue Dialoge erstellen müssen,
    und dafür auch entsprechende Klassen für die Ansichten.

    mfg.

    Devil



  • das problem wird sicherlich werden, dass ich ja jetzt schon ne ganze menge programmiert habe. hauptsächlich control funktionen (OnBnClick etc.)

    wäre es denn möglich in meiner neuen "zentralen Klasse" über jeweils ein funktion pro dialog die daten abzurufen und über eine andere funktion wieder zu senden. ich weiss jetzt halt nicht so recht wie ich das am einfachsten und sichersten "umwandel" ohne, dass ich am ende vor einem kaputten haufen 'code' stehe

    danke schonmal

    mfg, TFTS

    PS: in welche klasse würden dann die control funktionen kommen, in die dialog oder in die "zentrale" klasse



  • Die Funktionen für den Dialog bleiben natürlich beim Dialog.
    Dort greifst du dann auf die zentrale Klasse, also den Singelton zu:
    Singelton *pinstance = Singelton::GetInstance();
    pinstance->SetMyVar(varwert);
    MessageBox(pinstance->GetmyVar());

    Devil



  • was muss ich bei der definition der singelton klasse beachten, wo liegen die besonderheiten?

    soll ich diese als MFC klasse definieren? welche Basisklasse sollte ich wählen? wozu dient die automatisierung?

    mfg, TFTS



  • ich versuchs nochmal

    ich hab mir jetzt eine klasse "daten" erstellt. nun möchte ich 3 variablen (meinetwegen x,y,z) an diese klasse schicken und dort speichern. danach möchte ich diese 3 variablen wieder in meine dialog klasse zurückholen.

    ich habe in der daten klasse 2 Funktionen "Daten_schreiben" und "Daten_holen"

    Daten_schreiben soll die von der dialog klasse kommenden variablen irgendwie sichern. es soll natürlich der name der variablen erhalten bleiben, da ich beim zurückholen der variablen natürlich in meiner dialog klasse irgendwas in der art x.Daten_holen() y.Datenholen() z.Datenholen() schreiben will. Das es soo direkt nicht geht ist mir klar, da x,y,z natürlich nicht vom Typ Daten sind. Aber es sollte letztendlich irgendwie in diese richtung gehen. meintewegen auch mit anderen operatoren und zusätzlichen pointern.

    Kann mir jmd sagen wie ich das mache, oder wo soetwas EINDEUTIG beschrieben steht?

    danke für eure hilfe

    mfg, TFTS



  • TFTomSun schrieb:

    was muss ich bei der definition der singelton klasse beachten, wo liegen die besonderheiten?

    soll ich diese als MFC klasse definieren? welche Basisklasse sollte ich wählen? wozu dient die automatisierung?

    mfg, TFTS

    Nein, die Singelton klasse musst du nicht als MFC Klasse definieren.
    Sie kann aber MFC Klassen als Member enthalten.

    class Singleton
    {
    private:
    /* Hier dann die Daten rein */
      int a,b,c;
      ~Singleton();
    public:
      static Singleton& Instance()
      {
        static Singleton instance;
        return instance;
      }
      void SetDaten(int A,int B,int C)
      { a = A; b = B; c = C; }
      void GetDaten(int& A, int& B, int& C)
      { A = a; B = b; C = c; }
    };
    
    Singelton& instance = Singelton::Instance();
    instance.SetDaten(1,2,3);
    int a,b,c;
    instance.GetDaten(a,b,c);
    

    Devil



  • danke!

    noch eine frage ... wie mach ich das bei feldern. ich hab hier ein paar CString Arrays. da möchte ich natürlich nicht jeden wert einzeln übertragen sondern am liebsten das gesamte array mit einem zug

    noch etwas du hast jetzt SetDaten(1,2,3) geschrieben... ich möchte aber gern direkt a,b,c setzen müsste ich dann vielleicht SetDaten(*a,*b,*c) reinschreiben? sorry wenn das totaler quatsch sein sollte.

    mfg, TFTS

    PS: ich glaub das ist totaler quatsch, da damit ja die speicheradresse von a, b und c übergeben wird, richtig?



  • Das ist selbstverständlich nur ein Beispiel, denken muss man selber 😉

    Du kannst natürlich auch
    int GetA();int GetB();/.../
    machen, und den wert jeweils zurückgeben.
    Arrays solltest du entweder dann in einer SetFunktion anlegen
    im Singelon, und den Pointer aufs erste element zurück geben,
    oder direkt nur den Pointer auf das Array übergeben.

    Devil



  • ich hab es jetzt so gemacht:

    int a,b,c,x,y,z;
    Daten instance;  
    a=1;
    b=2;
    c=3;
    instance.SetDaten(a,b,c); 
    instance.GetDaten(x,y,z);
    

    und es funktioniert. Bei den Arrays bräuchte ich aber glaub noch ne kleine hilfe



  • int *a;
    int *p = new int[5];
    a = p;//a zeigt jetzt auf p, und kann damit auf das array zugreifen.
    

    Du erzeugst das Array also entweder mit new in einer dialog Klasse,
    oder machst es im Singelton und übergibtst vorher die größe des arrays.

    Devil


Anmelden zum Antworten