www.mikrocontroller.net

Forum: PC-Programmierung OK bei CPropertySheet auswerten


Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karlheinz Druschel (Gast)
Datum:

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


Greets
Karlheinz

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
//{{AFX_DATA_INIT(CMeinePropertyPage)
m_iFileType = 0;
m_strFileName = _T("bla!");
//}}AFX_DATA_INIT

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

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.