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
Ok, hat sich erledigt... Beim Drücken von OK wird die Funktion OnApply() bei allen Pages nacheinander aufgerufen..... Greets Karlheinz
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.