Forum: PC-Programmierung OK bei CPropertySheet auswerten


von Karlheinz Druschel (Gast)


Lesenswert?

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

von Karlheinz Druschel (Gast)


Lesenswert?

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


Greets
Karlheinz

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.