OK bei CPropertySheet auswerten

Gast #428434
Hi Leuts,

ich habe hier einen Konfigurationsdialog angelegt.
Also die Hauptmaske ist vom Typ CPropertySheet, die einzelnen 
"Teilmasken" von CPropertyPage.
Klappt auch.
AAABER: Wenn der OK Button gedrückt wird, dann will ich die neuen Werte 
auslesen (mit UpdateData), beim Abbrechen-Button nicht.
Aber beim Klassenassistenen finde ich nun keine Möglichkeit, die 
OnOK-Funktion von CPropertySheet zu überschreiben.
Ich könnte nun beim Aufruf nachfragen wie die Funktion beendet wird (if 
....DoMoadl() == IDOK)..
Aber da muss ich ja jede Menge Funktionen zum Durchreichen der Werte 
schreiben...


Also:
CPropertyPage1 m1;
CPropertyPage2 m2;
CPropertyPage3 m3;

CPropertySheet()
{
   AddPage (&m1);
   AddPage (&m2);
   AddPage (&m3);
}

Kann mir jemand weiterhelfen ?

Greets
Karlheinz
Gast
Ok, hat sich erledigt...
Beim Drücken von OK wird die Funktion OnApply() bei allen Pages 
nacheinander aufgerufen.....


Greets
Karlheinz
Persönliche Seite
Da musst Du vorgehen wie bei ganz normalen Dialogen.

Die von den einzelnen PropertyPages veränderten Werte werden in der 
Memberfunktion DoDataExchange übertragen, in OnInitDialog in den Dialog 
hinein und in OnOk aus dem Dialog heraus.

Darum musst Du Dich aber nicht kümmern, weil das bereits die 
Implementation der Basisklasse übernimmt.

Worum Du Dich kümmern musst, ist, daß die verwendeten Variablen entweder 
von Hand in DoDataExchange behandelt werden (Richtung ist durch 
pDX->m_bSaveAndValidate gekennzeichnet) oder aber Du musst die Variablen 
mit dem ClassWizard als Membervariablen anlegen.

Dann gibt es im Konstruktor der Dialog/PropertyPage-Klasse einen 
Abschnitt, der von speziellen Kommentaren umschlossen ist und in dem die 
Initialisierung der Variablen erfolgt:
1
//{{AFX_DATA_INIT(CMeinePropertyPage)
2
m_iFileType = 0;
3
m_strFileName = _T("bla!");
4
//}}AFX_DATA_INIT

Der Datenaustausch wird dann auch vom Classwizard in DoDataExchange 
vorbereitet, dieser Abschnitt ist auch von speziellen Kommentaren 
umschlossen:
1
//{{AFX_DATA_MAP(CMeinePropertyPage)
2
DDX_Text(pDX, IDC_EDIT_HEIGHT, m_iHeight);
3
DDX_Text(pDX, IDC_EDIT_WIDTH, m_iWidth);
4
//}}AFX_DATA_MAP

Das genügt; Du musst also weder OnOk bzw. OnCancel selbst überladen 
nocht irgendwelche Durchreichfunktionen schreiben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.