Funktion aus CView Klasse in CDoc Klasse aufrufen



  • Hallo!

    Irgendwas mache ich Falsch!

    Ich habe ein SDI Dokument und möchte in einer Funktion in der Klasse CBasicappDoc eine Funktion aus VBasicappView aufrufen.

    Wenn ich aber ein Objekt von CBasicappView erzeugen möchte:

    CBasicappView cview;
    

    Bekomme ich den Compile Fehler:
    "CBasicappView"::"CBasicappView" : Kein Zugriff auf protected Element, dessen Deklaration in der Klasse CBasicappView erfolgte.

    Wenn ich das ganze mit einem Pointer probiere:

    CBasicappView *pview;
    

    Ist es mit 1 Warnung Compilierbar ...
    wenn ich dann die Funktion mit

    pview.Live();
    

    aufrufe bekomme ich einen Laufzeitfehler!

    Was mache ich falsch? 😕 😕

    Vielen Dank im Voraus!
    LG, Ronny



  • Hallo!

    Der Konstruktor von aus CViewXXX abgeleiteten Klassen ist standardmäßig protected. Willst Du eine Instanz von dieser Klasse erzeugen, mußt Du den Konstruktor auf public setzten.

    Gruß Christian



  • Hallo und Danke!!!

    Jetzt kann ich die Instanz erzeugen! (CBasicappView cview;)
    jetzt möchte ich über cview.Live();
    eine Funktion aus CBasicappView aufrufen aber die Funktioniert nicht! wieso??
    (Programmabsturz.....)

    Die Funktion Live in CBasicappView wird über einen Button gestartet und funktioniert einwandfrei jetzt möchte ich das am Ende einer Funktion in CBasicappDoc genau das selbe durchgeführt wird wie wenn ich auf den Button Klicke!
    Geht das vielleciht noch leichter? Bzw. wieso geht es auf obigen Weg nicht??

    Hilfe!! 😕

    Vielen Dank im Voraus
    LG, Ronny



  • Es ergibt keinen Sinn, einfach eine Instanz der Viewklasse zu erzeugen. Du willst nicht irgendeine Instanz, du willst die Instanz, die zu deinem Dokument gehört.

    Da ein Dokument mehrere Views haben kann, musst du dich da durchhangeln, mit GetFirstViewPosition und GetNextView. Den Rückgabewert von GetNextView musst du noch in den passenden Typ umwandeln.



  • Es macht auch keinen Sinn aus der DOC eine Methode aus der View aufzurufen.
    Die wiederspricht dem Sinn von DOC/VIEW.

    DOC hält die Daten bereit. View zeigt sie an.
    Wenn du etwas mit den daten machen willst dann implemetiere die Funktin in die DOC solange es nichts mit der VIEW zu tun hat.



  • Hallo und Danke für eure Antworten!!

    Aber ich hab sie leider ehrlich gesagt nicht verstanden!

    Rückgabewert ist das und nach was suche ich eigentlich mit GetNextView 😕 ??

    Ich glaube nicht das ich da was in Doc implementieren kann von dieser Funktion in View....
    Die Funktion passt so wie sie ist und sie läuft ja auch super wenn ich auf den Button Klicke... etc,....

    Nur möchte ich das genau das selbe ausgeführt nach der Funktion in Doc... Es soll nämlich nach der Speichern Funktion in Doc wieder das Live Bild kommen, genau so wie wenn ich nach dem speichern wieder auf Live klicken würde...
    Geht das wirkich so schwer???? Hätte eigentlich gedacht das das 2 klicks sind und fertig....
    Kann man den Button oder die Funktion nicht irgendwie einfach aus diese Funktion starten?

    Vielen Dank im Voraus!
    LG, Ronny



  • Hallo!

    Habs jetzt geschafft!

    Falls es jemanden interesiert:

    POSITION pos = GetFirstViewPosition();
    CView* pFirstView = GetNextView( pos );  // Holt sich die pos vom View
    
    CBasicappView* pBspView = (CBasicappView*) pFirstView;  
    //Cast des CView Pointers auf CBasicappView
    pBspView->OnCameraLive();  //  Startet Live Bild!
    

    LG, Ronny


Anmelden zum Antworten