Freigeben über


Erstellen eines nicht modalen Eigenschaftenblatts

Normalerweise sind die eigenschaftenblätter, die Sie erstellen, modal. Bei Verwendung eines modalen Eigenschaftenblatts muss der Benutzer das Eigenschaftenblatt schließen, bevor er einen anderen Teil der Anwendung verwendet. In diesem Artikel werden Methoden beschrieben, mit denen Sie ein modusloses Eigenschaftenblatt erstellen können, mit dem der Benutzer das Eigenschaftenblatt geöffnet lassen kann, während andere Teile der Anwendung verwendet werden.

Rufen Sie CPropertySheet::Create anstelle von DoModal auf, um ein Eigenschaftenblatt als modusloses Dialogfeld anstelle eines modalen Dialogfelds anzuzeigen. Sie müssen auch einige zusätzliche Aufgaben implementieren, um ein modusloses Eigenschaftenblatt zu unterstützen.

Eine der zusätzlichen Aufgaben besteht im Austausch von Daten zwischen dem Eigenschaftenblatt und dem externen Objekt, das beim Öffnen des Eigenschaftenblatts geändert wird. Dies ist in der Regel die gleiche Aufgabe wie für Standardmoduslose Dialogfelder. Teil dieser Aufgabe ist die Implementierung eines Kommunikationskanals zwischen dem moduslosen Eigenschaftenblatt und dem externen Objekt, auf das die Eigenschafteneinstellungen angewendet werden. Diese Implementierung ist wesentlich einfacher, wenn Sie eine Klasse von CPropertySheet für ihr modusloses Eigenschaftenblatt ableiten. In diesem Artikel wird davon ausgegangen, dass Sie dies getan haben.

Eine Methode für die Kommunikation zwischen dem moduslosen Eigenschaftenblatt und dem externen Objekt (z. B. der aktuellen Auswahl in einer Ansicht) besteht darin, einen Zeiger vom Eigenschaftenblatt auf das externe Objekt zu definieren. Definieren Sie eine Funktion (wie etwa SetMyExternalObject) in der CPropertySheetabgeleiteten Klasse, um den Zeiger zu ändern, wenn sich der Fokus von einem externen Objekt in ein anderes ändert. Die SetMyExternalObject Funktion muss die Einstellungen für jede Eigenschaftenseite zurücksetzen, um das neu ausgewählte externe Objekt widerzuspiegeln. Dazu muss die SetMyExternalObject Funktion auf die CPropertyPage-Objekte zugreifen können, die zur CPropertySheet Klasse gehören.

Die bequemste Möglichkeit zum Bereitstellen des Zugriffs auf Eigenschaftenseiten innerhalb eines Eigenschaftenblatts besteht darin, die CPropertyPage Objekte in das CPropertySheetabgeleitete Objekt einzubetten. Das Einbetten von CPropertyPage Objekten in das CPropertySheetabgeleitete Objekt unterscheidet sich vom typischen Design für modale Dialogfelder, bei dem der Besitzer des Eigenschaftenblatts die CPropertyPage Objekte erstellt und über CPropertySheet::AddPage an das Eigenschaftenblatt übergibt.

Es gibt viele Alternativen für die Benutzeroberfläche, um zu bestimmen, wann die Einstellungen des Eigenschaftenblatts ohne Modus auf ein externes Objekt angewendet werden sollen. Eine Alternative besteht darin, die Einstellungen der aktuellen Eigenschaftenseite anzuwenden, wenn der Benutzer einen beliebigen Wert ändert. Eine weitere Alternative besteht darin, eine Schaltfläche "Übernehmen" bereitzustellen, mit der der Benutzer Änderungen an den Eigenschaftenseiten sammeln kann, bevor sie zum externen Objekt verpflichtet werden. Informationen zur Behandlung der Schaltfläche "Übernehmen" finden Sie im Artikel "Behandeln der Schaltfläche "Anwenden".

Siehe auch

Eigenschaftenblätter
Austausch von Daten
Arbeiten mit Dialogfeldern in MFC