Anzeige:
Ergebnis 1 bis 5 von 5

Thema: wxWidgets: Event eines Fensters in einer anderen Klasse registrieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    wxWidgets: Event eines Fensters in einer anderen Klasse registrieren

    Hallo,

    ich habe 2 Klassen mit jeweils eigen verwalteten Events.
    Ich möchte nun gerne den CLOSE-Event der einen FensterKlasse der anderen mitteilen, um damit gewisse Einstellungen zu speichern.
    Hat jemand eine Idee?

    Der Event ist der EVT_CLOSE, das Problem ist, das dieser jeweils als Listener im aktuellen Fenster hängt, und ich diesen Event von dem anderen Fesnter benötige.

    KLasse 1
    Code:
    
    BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    
                   //viele andere Events ....
    
    	/*********************************/
    	/*	Attribute Settings Events    */
    	/*********************************/
    	EVT_CLOSE( MyFrame::OnUpdateAttributes)
    
    END_EVENT_TABLE()
    Klasse 2

    Code:
    BEGIN_EVENT_TABLE( PrefAttribute, wxFrame)
    	EVT_BUTTON(ID_BUTTON_OK, PrefAttribute::OnButtonOk)
    	EVT_BUTTON(ID_BUTTON_CANCEL, PrefAttribute::OnButtonCancel)
    END_EVENT_TABLE()
    Also in der Klasse 1 möchte ich gerne den CLose-Event der Klasse 2 registrieren.
    Geändert von tommy@linux (11-10-2004 um 12:47 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Stanislaus
    Registriert seit
    04.07.2003
    Ort
    Mönchengladbach
    Beiträge
    80
    Moin, moin!

    Ich denke das wird so nicht funktionieren.
    Das Problem ist ja, daß Klasse 1 evtl. Klasse 2 kennt aber damit noch lange nicht weiß welche Instanz von Klasse 2 angesprochen werden muss.
    Dazu müsstest Du die Instanz von Klasse 2 an die Instanz von Klasse 1 übergeben und könntest dann auch gleich über eine platte public Funktion von Klasse 2 Deinen Aufruf machen.

    Bis neulich ...

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    Also

    Klasse 1, kennt die Instanz von Klasse 2.

    Der Close_Event muss in der Klasse 2 registriert sein, also

    Klasse 2

    Code:
    BEGIN_EVENT_TABLE( PrefAttribute, wxFrame)
    	EVT_CLOSE( PrefAttribute::OnWindowClose)
    END_EVENT_TABLE()
    In der Funktion von OnWindowClose() wollte ich einfach eine public Funktion, der Klasse 1 aufrufen. Das Problem besteht aber darin, das ich die Klasse 2 in der Klasse 1 include, da ich eine Instanz dort brauche. Um nun in der Klasse 2 eine public Methode der Klasse 1 aufzurufen, müsste ich diese auch wieder includen -> SO kommt es zum rekursiven Aufruf der Includierungen...

    Vorschläge?

  4. #4
    Registrierter Benutzer Avatar von Stanislaus
    Registriert seit
    04.07.2003
    Ort
    Mönchengladbach
    Beiträge
    80
    Zitat Zitat von tommy@linux
    ...Das Problem besteht aber darin, das ich die Klasse 2 in der Klasse 1 include, da ich eine Instanz dort brauche.
    Also sind 1 bis n Instanzen von Klasse 2 Member von Klasse 1?!

    Zitat Zitat von tommy@linux
    Um nun in der Klasse 2 eine public Methode der Klasse 1 aufzurufen, müsste ich diese auch wieder includen -> SO kommt es zum rekursiven Aufruf der Includierungen...
    Übergib die Instanz der Klasse 1 beim erzeugen einer Instanz von Klasse 2 als Parent und ruf dann aus der Instanz von K 2 die gewünschte Funktion des parent auf.
    Alternativ kannst Du eine CallBack Funktion bauen. Oder Du implementierst in K 2 eigene wxEvents (die nix anderes als Callback Funktionen sind), die von K 1 behandelt werden.
    Wie man wxEvents implementiert ist in der Doku bestens beschrieben.

    Bis neulich ...

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    Wink Habe es heruasbekommen

    Code:
    First.cpp
    #include Second;
    
    First.hpp
    //forward declaration
    class second;
    
    class First
    {
        Second     *second;
    }
    
    --------------------------------------------
    
    Second.cpp
    #include First;
    
    Second.hpp
    class First;
    class Second
    {
        First           *first;
    }

    Mit der Vorwärtsdeklaration funktioniert es... .
    Geändert von tommy@linux (24-10-2004 um 12:09 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •