PropertySheet Enter Key



  • Hey Leute!

    Ich habe folgendes Problem:

    Ich hab ein PropertySheet mit 2 PropertyPages. Die 4 Buttons (ok, abbrechen, hilfe, übernehmen) habe ich mittels DestroyWindow() gelöscht. Jetzt zu meinem Problem:

    Jedes mal wenn ich die "Enter"-Taste drücke wird meine Applikation geschlossen. Wie kann ich das vermeiden??

    Ich habe schon versucht die OnOK() Methode der PropertyPages und des PropertySheets zu überschreiben. Wenn ich dann die"Enter"-Taste drücke springt er zwar da rein, schließt die Applikation danach aber dennoch.

    Was mache ich falsch??


  • Mod

    1. Warum willst Du diese Buttons nicht haben? Sie gehören zur "gewohnten" UI.
    2. Ich würde diese Buttons verstecken und disablen anstatt diese zu löschen.
    3. Bei einem PropertySheet wird durch die Eingabe-Taste nicht OnOK ausgelöst sondern OnApply! OnApply ruft OnOK auf, aber der Rückgabewert on OnApply ist entscheidend.

    Steht wie immer alles in der MSDN:
    CPropertyPage::OnOK
    http://msdn.microsoft.com/de-de/library/bk18fb1f.aspx
    CPropertyPage::OnApply
    http://msdn.microsoft.com/de-de/library/5661b603.aspx

    4. Eine andere Lösung wäre, dass Du im CPropertySheet einen ONOK Handler einbaust und nicht auf der PropertyPage...



  • oder 5. Das PropertySheet mit new und Create erzeugen.
    Dann ist es automatisch ohne buttons.


  • Mod

    EOP schrieb:

    oder 5. Das PropertySheet mit new und Create erzeugen.
    Dann ist es automatisch ohne buttons.

    Und dann werden dennoch alle Pages erzeugt und funktionieren normal?
    Das ist mir neu... aber eigentlich logisch...



  • Hab da iwe nich mehr durchgeblickt. Vielen Dank auf jeden Fall.



  • Ich mach' das seit Jahren so und es funktioniert hervorragend.
    Basiert auf einem Code-Beispiel von codeguru, das ich im Moment nicht finde.

    Das Ganze sieht dann in etwa so aus:

    1. CPropertySheet subclassen // (alle deine von CPropertyPage abgeleiteten Klassen werden hier auch dynamisch erzeugt)
    // dann, wenn du es erzeugen willst
    2. my_PropSheet = new CMyPropertySheet( _T(""), this, 0 );
    3. if( !my_PropSheet->Create(this, WS_CHILD | WS_VISIBLE, 0) ) ...
    

    Ist aber nicht unbedingt was für MFC-Neulinge!

    Alles innerhalb einer dialogbasierten Anwendung. Wenn man dann noch die Größe anpasst hat man eine Oberfläche die nur aus "Tabs besteht".
    Alle anderen Versuche das zu erreichen schlugen bei mir fehl.

    z.B. statt einer dialogbasierten Anwendung gleich von CPropertySheet abzuleiten:
    Funktioniert zwar, aber ergibt dann so Probleme wie die des OP.

    Optisch so:
    http://i.imgur.com/1tNTN.jpg



  • Hi,
    kannst du den Code ein bisschen genauer erklären?
    Das ist genau, dass was ich suche. Ich habe im OnInitDialog(), per AddPage Tabs hinzugefügt, nur leider sind das dann Zwei unterschiedliche Dialoge.

    Einmal der Ausgangsdialog und einmal der Dialog mit Tabs.

    Du erstellst ein Dialog-Projekt und fügst weitere Dialoge hinzu. Danach weißt du den Tab-Dialogen jeweils eine Klasse mit der Basisklasse CPropertyPage zu. Fügst die Header-Dateien ein und initialisiert eine Instanz von CPropertySheet.

    Und nun komm ich nicht mehr mit :).

    Wäre super wenn mir jemand weiterhelfen könnte. Wo beginnst du die subclassen im Dialog zu erzeugen?

    Was genau passier hier:

    my_PropSheet = new CMyPropertySheet( _T(""), this, 0 );
    if( !my_PropSheet->Create(this, WS_CHILD | WS_VISIBLE, 0)
    

    Hier mein Thread.



  • Hab dort drauf geantwortet.


Log in to reply