Funktion der aufrufenden Klasse auslösen



  • Ich habe eine Klasse (kein Window), die einen Dialog erzeugt. Wenn jemand in dem Dialog einen bestimmten Button drückt, soll eine Funktion der aufrufenden Klasse ausgeführt werden. Wie ist der beste Weg, das zu erreichen? Bei Fensterklassen ist das ja einfacher, da kann ich ne Message schicken, aber so ?
    Muzel



  • Gib im Konstruktor einen Zeiger auf die Klasse mit. 🙂



  • Könntest du das bitte noch etwas genauer erklären. Ich erstelle den Dialog mit Create.
    Muzel



  • Och mönsch... das wird hier so oft erklärt... 🙄

    Du machst im Dialog eine Membervariable, die ein Zeiger auf die aufrufende Klasse ist.
    Am einfachsten public. (Da du Anfänger zu sein scheinst, nehmen wir die faule Version.)
    Und direkt vor dem Aufruf mit Create machst du:

    dlg.m_pAufrufendeKlasse = this;
    

    Dann kannst du über den Zeiger zugreifen, wie du es kennst. 🙂



  • muzel schrieb:

    Könntest du das bitte noch etwas genauer erklären. Ich erstelle den Dialog mit Create.
    Muzel

    du hast zwei klassen. die dialogfeldklasse und die fensterklasse(kann auch ne andere sein).

    die dialogfeldklasse hat eine membervariable der klasse CFensterKlasse.
    nach dem du das dialogfeld objekt erstellt hast weist du dem fensterklassenobjekt/pointer die adresse des fensterobjektes zu. danach kannst du mit dem uebergebenen pointer die methoden ausfuehren, zB so:

    //in der femsterklasse:
    CDialog* poDialog = new CDialog();
    poDialog->m_poFensterklasse = this;
    poDialog->Create();
    
    // im dialog:
    m_poFensterklasse->Funktion();
    

    wie von estardu_de angesprochen ist es noch eleganter, wenn du dem dialogobjekt den pointer im konstruktor mitgibst. dabei musst du halt aufpassen, wenn du den dialog von wo anders oeffnest, was du ihm dann uebergibst. ausserdem immer schoen mit NULL initialisieren und nach NULL dann abfragen, wbevor der die FensterKlassenMethode aufgerufen wird, sonst stuerzt dein prog ab, wenn du ihm keinen pointer uebergeben hast.

    Esco


Anmelden zum Antworten