MFC: PropertySheet Daten übergeben

  • #1
P

PeterOG

Guest
Normalerweise kann ich ja wenn ich von CView ableite mit dem Zeiger m_pDocument oder der Methode GetDocument() das dokument auslesen...
Wenn ich PropertyPage nehme,  dann erkennt es nicht und sagt unbekannter bezeichner.
Wie kann ich Daten von einer Propertypage auslesen bzw. übergeben?
MFG
 
  • #2
Wenn ich PropertyPage nehme,  dann erkennt es nicht und sagt unbekannter bezeichner.

Du hast ja auch kein Document-View-Modell, sondern eine dialogbasierte Anwendung ...

Wie kann ich Daten von einer Propertypage auslesen bzw. übergeben?

Hast Du zu den einzelnen Property-Pages entsprechende Membervariablen hinzugefügt bzw. die Klassen erzeugen lassen?
Wenn noch nicht: Im Dialogeditor auf die Seite rechtsklicken und Klasse hinzufügen ... (o.ä.) wählen. Den Namen für die Property-Page eingeben und die Basisklasse wählen (CPropertyPage) (*).
Wenn die Klasse erzeugt wurde, auf die Controls rechtsklicken und eine Variable hinzufügen (idR.->Wert' - o.ä., ich verwende die englische Version; nicht->Control'). Dann wählst Du den Typ, den Du möchtest (CString, int, ...) und, falls sinnvoll, einen Wertebereich (bei int z.B. Minimal- und Maximalwert).
Diese Variablen werden standardmäßig als public angelegt, Du kannst also von außen über die Property-Page auf sie zugreifen. Initialisiert werden sie im Konstruktor der jeweiligen Property-Page; Du kannst ihnen auch in->OnInitDialog' der Property-Pages Werte zuweisen (also bevor die PP angezeigt wird).

(*)
Der automatisch erstellte Konstruktur ist dann parameterlos, Erzeugung also

...
CPropertyPage* ppge1= new CMyPage01();
CPropertyPage* ppge2= new CMyPage02();
AddPage(ppge1);
AddPage(ppge2);
SetWizardMode();
...
o.ä.

BTW: Falls Du die Buttons noch nicht angepasst hast ...
In der jeweiligen PP->OnSetActive' überschreiben lassen; dort dann die Buttons setzen. Auf der ersten Seite

BOOL CMyPage01::OnSetActive()
{
  CPropertySheet* parent = reinterpret_cast<CPropertySheet*>(GetParent());
  parent->SetWizardButtons(PSWIZB_NEXT);
  return CPropertyPage::OnSetActive();
}

Auf der letzten Seite z.B.

BOOL CMyPage02::OnSetActive()
{
  CPropertySheet* parent = reinterpret_cast<CPropertySheet*>(GetParent());
  parent->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
  return CPropertyPage::OnSetActive();
}

Du kannst auf Finish reagieren, indem Du->OnWizardFinish' überschreiben lässt (damit meine ich, vom Wizard die Methode generieren lässt; Du kannst sie natürlich auch von Hand einfügen; in diesem Fall die Header-Datei nicht vergessen:->virtual BOOL OnWizardFinish();'):

BOOL CMyPage02::OnWizardFinish()
{
  // ... hier nötiger Code
  // Wenn Du die Variablen-Werte brauchst,->UpdateData(TRUE)' nicht vergessen; das wird sonst erst
  // anschließend gemacht.

  return CPropertyPage::OnWizardFinish();
}

Du kannst auch von den Property-Pages aus öffentliche Funktionen Deiner Property-Sheet-Klasse aufrufen; dazu musst Du aber casten:

CMyPropertySheet* ps = reinterpret_cast<CMyPropertySheet*>(GetParent());
parent->...

Nicht die nötigen includes vergessen.

Auch wenn Du von außen auf die Variablen der Poperty-Pages zugreifen willst, musst Du casten, wenn Du nur ein CPropertyPage-Objekt hast.
CMyPage01* pp = reinterpret_cast<CMyPage01*>(propertySheet.GetPage(0));

Es ist übrigens nicht die feine objektorientierte Art, direkt auf die Variablen zuzugreifen; wenn Du es anders machen willst, kannst Du im einfachsten Fall die Variablen private machen und Methoden in Deine PropertyPage-Klassen einfügen, die die Daten zurückgeben:

void MyPage01::GetData(CString& value1, int& value2, ...) ...

Auch dort nicht->UpdateData(TRUE)' vergessen.

Setzen der Variablen: Auch eine solche Methode verwenden [und dann->UpdateData(FALSE)']; normalerweise reicht aber die Initialisierung im Konstruktor (-> Konstruktor-Parameter).

Ich hoffe, dass Du damit klar kommst, für mehr habe ich gerade keine Zeit (auch nicht zum Korrekturlesen).
 
Thema:

MFC: PropertySheet Daten übergeben

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.966
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben