Beim Aufruf von CPropertyPage absturz



  • Hallo,

    ich konstruiere in einer Dialoganwendung ein CPropertyPage-Objekt und rufe es dann mit DoModal auf. Dabei erhalte ich einen Absturtz. Kann mir da jemand helfen bzw. code posten wie ich das richtig machen kann ?

    vielen Dank

    ...
    CPropertyPage page;
    page.DoModal();                // Absturtz
    ...
    


  • das kann daran liegen, das du keine Initialisierung machst. versuch mal das Objekt mit Werten zu initialisieren.



  • Die PropertyPage-Dinger sind doch für Karteireiter gedacht, oder ? Den einzelnen Aufruf von so einem Ding habe ich noch nie gesehen. Ich kenne das nur über den Aufruf von CPropertySheet, wobei man mehrere CPropertyPage-Dialoge als Karteireiter einbinden kann:
    - einen Dialog erstellen und eine von CPropertyPage abgeleitete Klasse dazu erstellen (OK, hast du ja schon)
    - eine von CPropertySheet abgeleitete Klasse erstellen (Rechtsklich auf das Projekt -> Klasse hinzufügen -> ...)
    - in dem Header der CPropertySheet-Klasse den Header der CPropertyPage-Klasse includieren (z.B.: #include "PPage.h")
    - in dem Header der CPropertySheet-Klasse einen Pointer auf die CPropertyPage-Klasse erstellen (z.B.: CPPage* PPage; )
    - im Konstruktor der CPropertySheet-Klasse den Pointer auf NULL setzen (z.B.: PPage = NULL; )
    - im Destruktor der CPropertySheet-Klasse den Pointer löschen (z.B.: if(PPage != NULL) delete PPage; )
    - in DoModal() der CPropertySheet-Klasse den Pointer mit new initialisieren (z.B.: PPage = new CPPage(); )
    - in DoModal() der CPropertySheet-Klasse den Dialog mit AddPage(...) einfügen (z.B.: AddPage(PPage); )
    - in der Klasse, in der du das Ganze aufrufen willst, die CPropertySheet-Klasse inkludieren (z.B.: #include "PSheet.h")
    - an der Stelle in der Klasse, an der du das Ganze aufrufen willst, ein Objekt der CPropertySheet-Klasse erzeugen (z.B.: CPSheet PSheet("Caption", NULL, 0); )
    - ...und das Sheet mit DoModal() aufrufen (z.B.: PSheet.DoModal(); )

    -> Jetzt erscheint ein Dialog mit nur einem Karteireiter. Für weitere Karteireiter musst du noch mehr von CPropertyPage abgeleitete Dialoge erzeugen und analog mit AddPage(...) im Sheet einbinden.



  • Oh bekomme da eine Fehlermeldung wenn ich eine Klasse erstellen soll die von den beiden obigen Klassen abgeleitet ist. Der Compiler meldet mir folgendes:

    "Sofern sie nicht eine Dialogfeldrecource erstellet für diese Klasse erstellt haben, legen Sie diese an und starten den Klassenassistenten. Andernfalls wird die Klasse mit einer ungültigen ID erstellt. Mit dem erstellen der Klasse fortfahren ?"

    woran liegt das ?



  • Mmmmhhh, vielleicht hast du Punkt eins (s.o.) doch noch nicht...:
    - einen neuen Dialog erstellen (im Arbeitsbereich bei den Ressourcen Rechtsklick auf "Dialog" und "Dialog einfügen") -> ein neuer Dialog wird erzeugt
    - Klassenassi aufrufen (im Menü "Ansicht" -> "Klassen-Assistent")
    -> ein Dialog erscheint "Wollen Sie eine neue Klasse erstellen ?" -> OK klicken
    - einen Klassennamen vergeben
    - als Basisklasse steht da "CDialog" -> ändern auf CPropertyPage -> OK
    Dann gehts mit Punkt zwei (s.o.) weiter.



  • dank dir :-))



  • Hallo nochmal,

    ich habe alles so gemacht wie du es aufgeschrieben hast aber wenn ich in meinem Dialog auf meinen Seite einrichten Button klicke passiert nichts :-((

    fehlt da vieleicht nochwas ?



  • Ich habe jetzt jeden Schritt, den ich beschrieben habe, noch mal in einem neuen Projekt nachvollzogen -> funktioniert.
    Da hast du wohl irgendetwas vergessen oder durcheinender gebracht oder sonstwas verwechselt... ?

    Mir ist aber aufgefallen, dass in der CPropertySheet-Klasse zuerst keine DoModal() vorhanden ist. Die muss man erst noch hinzu fügen (im Arbeitsbereich ein Klick mit der rechten Maustaste auf die CPropertySheet-Klasse -> Virtuelle Funktion hinzufügen -> DoModal auswählen -> OK klicken -> DoModal wird hinzugefügt).


Anmelden zum Antworten