MFC: PropertySheet Daten übergeben

Dieses Thema MFC: PropertySheet Daten übergeben im Forum "Windows XP Forum" wurde erstellt von PeterOG, 1. März 2006.

Thema: MFC: PropertySheet Daten übergeben Normalerweise kann ich ja wenn ich von CView ableite mit dem Zeiger m_pDocument oder der Methode GetDocument() das...

  1. 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. Du hast ja auch kein Document-View-Modell, sondern eine dialogbasierte Anwendung ...

    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).
     
Die Seite wird geladen...

MFC: PropertySheet Daten übergeben - Ähnliche Themen

Forum Datum
Datenrettung /sicherung Windows 10 Forum 22. Sep. 2016
Windows upgrade und datenverlust!? Windows 10 Forum 5. Juli 2016
Import Datensatz inkl = und - Zeichen in Excel/Libre CALC Software: Empfehlungen, Gesuche & Problemlösungen 20. Mai 2016
Datenrettung nach CRC-Fehler Datenwiederherstellung 18. Mai 2016
Windows 10 Build 10240 läßt sich nicht auf das Herbst-Updates updaten. Windows 10 Forum 7. Mai 2016