CPropertySheet
-Klasse
Stellt Eigenschaftenblätter dar, auch als "Dialogfelder im Registerformat" bezeichnet.
Syntax
class CPropertySheet : public CWnd
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CPropertySheet::CPropertySheet |
Erstellt ein CPropertySheet -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CPropertySheet::AddPage |
Fügt dem Eigenschaftsblatt eine Seite hinzu. |
CPropertySheet::Construct |
Erstellt ein CPropertySheet -Objekt. |
CPropertySheet::Create |
Zeigt ein modusloses Eigenschaftenblatt an. |
CPropertySheet::DoModal |
Zeigt ein modales Eigenschaftenblatt an. |
CPropertySheet::EnableStackedTabs |
Gibt an, ob das Eigenschaftenblatt gestapelte oder scrollende Registerkarten verwendet. |
CPropertySheet::EndDialog |
Beendet das Eigenschaftenblatt. |
CPropertySheet::GetActiveIndex |
Ruft den Index der aktiven Seite des Eigenschaftenblatts ab. |
CPropertySheet::GetActivePage |
Gibt das aktive Seitenobjekt zurück. |
CPropertySheet::GetPage |
Ruft einen Zeiger auf die angegebene Seite ab. |
CPropertySheet::GetPageCount |
Ruft die Anzahl der Seiten im Eigenschaftenblatt ab. |
CPropertySheet::GetPageIndex |
Ruft den Index der angegebenen Seite des Eigenschaftenblatts ab. |
CPropertySheet::GetTabControl |
Ruft einen Zeiger auf ein Registerkartensteuerelement ab. |
CPropertySheet::MapDialogRect |
Konvertiert die Dialogfeldeinheiten eines Rechtecks in Bildschirmeinheiten. |
CPropertySheet::OnInitDialog |
Überschreiben, um die Initialisierung des Eigenschaftenblatts zu erweitern. |
CPropertySheet::PressButton |
Simuliert die Auswahl der angegebenen Schaltfläche in einem Eigenschaftenblatt. |
CPropertySheet::RemovePage |
Entfernt eine Seite aus dem Eigenschaftenblatt. |
CPropertySheet::SetActivePage |
Legt das aktive Seitenobjekt programmgesteuert fest. |
CPropertySheet::SetFinishText |
Legt den Text für die Schaltfläche "Fertig stellen" fest. |
CPropertySheet::SetTitle |
Legt die Beschriftung des Eigenschaftenblatts fest. |
CPropertySheet::SetWizardButtons |
Aktiviert die Schaltflächen des Assistenten. |
CPropertySheet::SetWizardMode |
Aktiviert den Assistentenmodus. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
CPropertySheet::m_psh |
Die Windows-Struktur PROPSHEETHEADER . Bietet Zugriff auf grundlegende Eigenschaftenblattparameter. |
Hinweise
Ein Eigenschaftenblatt besteht aus einem CPropertySheet
Objekt und einem oder CPropertyPage
mehreren Objekten. Das Framework zeigt ein Eigenschaftenblatt als Fenster mit einer Reihe von Registerkartenindizes und einem Bereich an, der die aktuell ausgewählte Seite enthält. Der Benutzer navigiert mithilfe der entsprechenden Registerkarte zu einer bestimmten Seite.
CPropertySheet
bietet Unterstützung für die erweiterte PROPSHEETHEADER
Struktur, die in Windows 98 und Windows NT 2000 eingeführt wurde. Die Struktur enthält zusätzliche Flags und Member, die die Verwendung einer "Wasserzeichen"-Hintergrundbitmap unterstützen.
Um diese neuen Bilder automatisch in Ihrem Eigenschaftenblattobjekt anzuzeigen, übergeben Sie gültige Werte für die Bitmap- und Palettenbilder im Aufruf CPropertySheet::Construct
oder CPropertySheet::CPropertySheet
.
CPropertySheet
Obwohl nicht abgeleitet CDialog
wird, ist das Verwalten eines CPropertySheet
Objekts wie das Verwalten eines CDialog
Objekts. Zum Beispiel erfordert die Erstellung eines Eigenschaftenblatts zweiteilige Konstruktion: Rufen Sie den Konstruktor auf, und rufen Sie DoModal
dann ein modales Eigenschaftenblatt oder Create
ein modusloses Eigenschaftenblatt auf. CPropertySheet
verfügt über zwei Typen von Konstruktoren: CPropertySheet::Construct
und CPropertySheet::CPropertySheet
.
Wenn Sie ein CPropertySheet
Objekt erstellen, können einige Fensterformatvorlagen zu einer Ausnahme mit der ersten Chance führen. Dies führt dazu, dass das System versucht, die Formatvorlage des Eigenschaftenblatts zu ändern, bevor das Blatt erstellt wird. Um diese Ausnahme zu vermeiden, stellen Sie sicher, dass Sie beim Erstellen CPropertySheet
der Folgenden Formatvorlagen festlegen:
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
Die folgenden Formatvorlagen sind optional und verursachen keine Ausnahme bei der ersten Chance:
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
Alle anderen Window Styles
sind verboten, und Sie sollten sie nicht aktivieren.
Das Austauschen von Daten zwischen einem CPropertySheet
Objekt und einem externen Objekt ähnelt dem Austauschen von Daten mit einem CDialog
Objekt. Der wichtige Unterschied besteht darin, dass die Einstellungen eines Eigenschaftenblatts in der Regel Membervariablen der CPropertyPage
Objekte und nicht des CPropertySheet
Objekts selbst sind.
Sie können einen Dialogfeldtyp erstellen, der als Assistent bezeichnet wird, der aus einem Eigenschaftenblatt mit einer Abfolge von Eigenschaftenseiten besteht, die den Benutzer durch die Schritte eines Vorgangs leiten, z. B. das Einrichten eines Geräts oder das Erstellen eines Newsletters. In einem Dialogfeld "Registerkarten vom Assistententyp" verfügen die Eigenschaftenseiten nicht über Registerkarten, und es ist jeweils nur eine Eigenschaftenseite sichtbar. Anstelle von Schaltflächen "OK " und "Jetzt anwenden" verfügt ein Dialogfeld für die Registerkarte "Assistenttyp" über eine Schaltfläche "Zurück ", eine Schaltfläche "Weiter " oder "Fertig stellen ", eine Schaltfläche "Abbrechen " und eine Hilfeschaltfläche .
Führen Sie zum Erstellen eines Dialogfelds vom Assistenten die gleichen Schritte aus, die Sie zum Erstellen eines Standardeigenschaftenblatts ausführen würden, rufen Sie jedoch SetWizardMode
vor dem Aufruf auf DoModal
. Um die Schaltflächen des Assistenten zu aktivieren, rufen Sie SetWizardButtons
die Schaltflächen des Assistenten mithilfe von Kennzeichen auf, um ihre Funktion und Darstellung anzupassen. Um die Schaltfläche "Fertig stellen " zu aktivieren, rufen Sie den Aufruf SetFinishText
auf, nachdem der Benutzer auf der letzten Seite des Assistenten Eine Aktion ausgeführt hat.
Weitere Informationen zur Verwendung von CPropertySheet
Objekten finden Sie im Artikel "Eigenschaftenblätter" und "Eigenschaftenseiten".
Vererbungshierarchie
CPropertySheet
Anforderungen
Header: afxdlgs.h
CPropertySheet::AddPage
Fügt die angegebene Seite mit der registerkarte ganz rechts im Eigenschaftenblatt hinzu.
void AddPage(CPropertyPage* pPage);
Parameter
pPage
Verweist auf die Seite, die dem Eigenschaftenblatt hinzugefügt werden soll. Darf nicht NULL
sein.
Hinweise
Fügen Sie dem Eigenschaftenblatt Seiten in der Reihenfolge von links nach rechts hinzu, in der sie angezeigt werden sollen.
AddPage
fügt das CPropertyPage
Objekt zur CPropertySheet
Liste der Seiten des Objekts hinzu, erstellt aber nicht tatsächlich das Fenster für die Seite. Das Framework verschiebt die Erstellung des Fensters für die Seite, bis der Benutzer diese Seite auswählt.
Wenn Sie eine Eigenschaftenseite verwenden AddPage
, ist dies CPropertySheet
das übergeordnete Element der CPropertyPage
. Rufen Sie CWnd::GetParent
auf, um zugriff auf das Eigenschaftenblatt von der Eigenschaftenseite zu erhalten.
Es ist nicht erforderlich, bis zum Erstellen des Eigenschaftenblattfensters zu warten, das aufgerufen wird AddPage
. In der Regel rufen AddPage
Sie vor dem Anruf DoModal
oder Create
.
Wenn Sie nach der Anzeige der Eigenschaftenseite aufrufen AddPage
, spiegelt die Registerkartenzeile die neu hinzugefügte Seite wider.
Beispiel
// Add three pages to a CPropertySheet object, then show the
// CPropertySheet object as a modal dialog. CStylePage, CShapePage,
// and CColorPage are CPropertyPage-derived classes created
// by the Add Class wizard.
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
dlgPropertySheet.DoModal();
CPropertySheet::Construct
Erstellt ein CPropertySheet
-Objekt.
void Construct(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
void Construct(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
void Construct(
UINT nIDCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
void Construct(
LPCTSTR pszCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
Parameter
nIDCaption
ID der Beschriftung, die für das Eigenschaftenblatt verwendet werden soll.
pParentWnd
Zeigen Sie auf das übergeordnete Fenster des Eigenschaftenblatts. Wenn NULL
das übergeordnete Fenster das Hauptfenster der Anwendung ist.
iSelectPage
Der Index der Seite, die sich anfangs im Vordergrund befindet. Der Standardwert ist die erste Seite, die dem Blatt hinzugefügt wird.
pszCaption
Zeigen Sie auf eine Zeichenfolge, die die beschriftung enthält, die für das Eigenschaftenblatt verwendet werden soll. Darf nicht NULL
sein.
hbmWatermark
Behandeln Sie die Wasserzeichen-Bitmap der Eigenschaftenseite.
hpalWatermark
Behandeln Sie die Palette der Wasserzeichenbitmap und/oder Headerbitmap.
hbmHeader
Behandeln Sie die Kopfzeilenbitmap der Eigenschaftenseite.
Hinweise
Rufen Sie diese Memberfunktion auf, wenn einer der Klassenkonstruktoren noch nicht aufgerufen wurde. Rufen Sie beispielsweise auf Construct
, wenn Sie Arrays von CPropertySheet
Objekten deklarieren oder zuordnen. Bei Arrays müssen Sie für jedes Element im Array aufrufen Construct
.
Zum Anzeigen des Eigenschaftenblatts rufen Sie DoModal
oder Create
. Die im ersten Parameter enthaltene Zeichenfolge wird in der Beschriftungsleiste für das Eigenschaftenblatt platziert.
Sie können Wasserzeichen und/oder Kopfzeilenbilder automatisch anzeigen, wenn Sie die dritten oder vierten Prototypen von Construct
oben aufgeführten verwenden und gültige Werte für die hbmWatermark
Parameter , hpalWatermark
und /oder hbmHeader
parameter übergeben.
Beispiel
Im folgenden Beispiel wird veranschaulicht, unter welchen Umständen Sie aufrufen Construct
würden.
const int c_cSheets = 3;
CPropertySheet grpropsheet[c_cSheets];
// no need to call Construct for this next one
CPropertySheet someSheet(_T("Some sheet"));
LPTSTR rgszSheets[c_cSheets] = {
_T("Sheet 1"),
_T("Sheet 2"),
_T("Sheet 3")
};
for (int i = 0; i < c_cSheets; i++)
grpropsheet[i].Construct(rgszSheets[i]);
CPropertySheet::CPropertySheet
Erstellt ein CPropertySheet
-Objekt.
CPropertySheet();
explicit CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
explicit CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
Parameter
nIDCaption
ID der Beschriftung, die für das Eigenschaftenblatt verwendet werden soll.
pParentWnd
Verweist auf das übergeordnete Fenster des Eigenschaftenblatts. Wenn NULL
das übergeordnete Fenster das Hauptfenster der Anwendung ist.
iSelectPage
Der Index der Seite, die sich anfangs im Vordergrund befindet. Der Standardwert ist die erste Seite, die dem Blatt hinzugefügt wird.
pszCaption
Verweist auf eine Zeichenfolge, die die beschriftung enthält, die für das Eigenschaftenblatt verwendet werden soll. Darf nicht NULL
sein.
hbmWatermark
Ein Handle zur Hintergrundbitmap des Eigenschaftenblatts.
hpalWatermark
Ein Handle zur Palette der Wasserzeichenbitmap und/oder Headerbitmap.
hbmHeader
Ein Handle zur Kopfzeilenbitmap der Eigenschaftenseite.
Hinweise
Zum Anzeigen des Eigenschaftenblatts rufen Sie DoModal
oder Create
. Die im ersten Parameter enthaltene Zeichenfolge wird in der Beschriftungsleiste für das Eigenschaftenblatt platziert.
Wenn Sie mehrere Parameter haben (z. B. wenn Sie ein Array verwenden), verwenden Sie Construct
anstelle von CPropertySheet
.
Sie können Wasserzeichen- und/oder Kopfzeilenbilder automatisch anzeigen, wenn Sie die dritten oder vierten Prototypen von CPropertySheet
oben verwenden und gültige Werte für die hbmWatermark
Parameter , hpalWatermark
und /oder hbmHeader
parameter übergeben.
Beispiel
// Declare a CPropertySheet object titled "Simple PropertySheet".
CPropertySheet dlgPropertySheet1(_T("Simple PropertySheet"));
// Declare a CPropertySheet object whose title is specified in the
// IDS_PROPERTYSHEET_TITLE string resource, and the second page is
// initially on top.
CPropertySheet dlgPropertySheet2(IDS_PROPERTYSHEET_TITLE, this, 1);
CPropertySheet::Create
Zeigt ein modusloses Eigenschaftenblatt an.
virtual BOOL Create(CWnd* pParentWnd = NULL,
DWORD dwStyle = (DWORD)-1,
DWORD dwExStyle = 0);
Parameter
pParentWnd
Verweist auf das übergeordnete Fenster. Wenn NULL
das übergeordnete Element der Desktop ist.
dwStyle
Fensterformatvorlagen für eigenschaftenblatt. Eine vollständige Liste der verfügbaren Formatvorlagen finden Sie unter "Fensterformatvorlagen".
dwExStyle
Erweiterte Fensterformatvorlagen für eigenschaftenblatt. Eine vollständige Liste der verfügbaren Formatvorlagen finden Sie unter "Erweiterte Fensterarten".
Rückgabewert
Nonzero, wenn das Eigenschaftenblatt erfolgreich erstellt wird; andernfalls 0.
Hinweise
Der Aufruf Create
kann sich innerhalb des Konstruktors befinden, oder Sie können ihn aufrufen, nachdem der Konstruktor aufgerufen wurde.
Die Standardformatvorlage, ausgedrückt durch Übergeben von -1 als dwStyle
, ist tatsächlich WS_SYSMENU|WS_POPUP|WS_CAPTION|DS_MODALFRAME|DS_CONTEXTHELP|WS_VISIBLE
. Die standardmäßige Formatvorlage für erweiterte Fenster, ausgedrückt durch Übergeben von 0 als dwExStyle
, ist tatsächlich WS_EX_DLGMODALFRAME
.
Die Create
Memberfunktion wird unmittelbar nach dem Erstellen des Eigenschaftenblatts zurückgegeben. Rufen Sie auf, um CWnd::DestroyWindow
das Eigenschaftenblatt zu zerstören.
Moduslose Eigenschaftenblätter, die mit einem Aufruf angezeigt werden, für die Create
keine Schaltflächen "OK", "Abbrechen", "Jetzt anwenden" und "Hilfe" angezeigt werden, wie modale Eigenschaftenblätter tun. Die gewünschten Schaltflächen müssen vom Benutzer erstellt werden.
Rufen Sie stattdessen auf DoModal
, um ein modales Eigenschaftenblatt anzuzeigen.
Beispiel
// This code fragment shows how to create a modeless property sheet
// dialog in a command message handler (OnModelessPropertySheet())
// of a CView-derived class.
void CPSheetView::OnModelessPropertySheet()
{
// Declare a CPropertySheet object. m_pdlgPropertySheet is a data
// member of type CPropertySheet in CView-derived class.
m_pdlgPropertySheet = new CPropertySheet(_T("Simple PropertySheet"));
ASSERT(m_pdlgPropertySheet);
// Add three pages to the CPropertySheet object. Both m_pstylePage,
// m_pcolorPage, and m_pshapePage are data members of type
// CPropertyPage-derived classes in CView-derived class.
m_pstylePage = new CStylePage;
m_pcolorPage = new CColorPage;
m_pshapePage = new CShapePage;
m_pdlgPropertySheet->AddPage(m_pstylePage);
m_pdlgPropertySheet->AddPage(m_pcolorPage);
m_pdlgPropertySheet->AddPage(m_pshapePage);
// Create a modeless CPropertySheet dialog.
m_pdlgPropertySheet->Create();
}
// The code fragment below shows how to destroy the C++ objects for
// propertysheet and propertypage in the destructor of CView-derived
// class.
// NOTE: DestroyWindow() is called in CPropertySheet::OnClose() so
// you do not need to call it here. Property pages are children
// of the CPropertySheet, they will be destroyed by their parents.
CPSheetView::~CPSheetView()
{
delete m_pshapePage;
delete m_pstylePage;
delete m_pcolorPage;
delete m_pdlgPropertySheet;
}
CPropertySheet::DoModal
Zeigt ein modales Eigenschaftenblatt an.
virtual INT_PTR DoModal();
Rückgabewert
IDOK
oder IDCANCEL
wenn die Funktion erfolgreich war; andernfalls 0 oder -1. Wenn das Eigenschaftenblatt als Assistent eingerichtet wurde (siehe SetWizardMode
), DoModal
gibt entweder ID_WIZFINISH
oder IDCANCEL
.
Hinweise
Der Rückgabewert entspricht der ID des Steuerelements, das das Eigenschaftenblatt geschlossen hat. Nachdem diese Funktion zurückgegeben wurde, wurden die Fenster, die dem Eigenschaftenblatt entsprechen, und alle Seiten zerstört. Die Objekte selbst sind weiterhin vorhanden. In der Regel rufen Sie Daten aus den CPropertyPage
Objekten ab, nachdem DoModal
IDOK zurückgegeben wurde.
Rufen Sie stattdessen auf Create
, um ein modusloses Eigenschaftenblatt anzuzeigen.
Wenn eine Eigenschaftenseite aus der entsprechenden Dialogressource erstellt wird, kann dies zu einer Ausnahme des ersten Zufalls führen. Dies führt dazu, dass die Eigenschaftenseite die Formatvorlage der Dialogressource in die erforderliche Formatvorlage ändert, bevor die Seite erstellt wird. Da Ressourcen im Allgemeinen schreibgeschützt sind, verursacht dies eine Ausnahme. Das System behandelt die Ausnahme und erstellt eine Kopie der geänderten Ressource. Die Ausnahme der ersten Chance kann daher ignoriert werden.
Hinweis
Diese Ausnahme muss vom Betriebssystem behandelt werden, wenn Sie mit dem asynchronen Ausnahmebehandlungsmodell kompilieren. Weitere Informationen zu Ausnahmebehandlungsmodellen finden Sie unter /EH
(Ausnahmebehandlungsmodell). Schließen Sie in diesem Fall keine Aufrufe mit einem C++-Try-Catch-Block um CPropertySheet::DoModal
, in dem der Catch alle Ausnahmen behandelt, catch (...)
z. B. . . Dieser Block behandelt die Ausnahme, die für das Betriebssystem vorgesehen ist, und verursacht unvorhersehbares Verhalten. Sie können die C++-Ausnahmebehandlung jedoch sicher mit bestimmten Ausnahmetypen oder einer strukturierten Ausnahmebehandlung verwenden, bei der die Zugriffsverletzungs-Ausnahme an das Betriebssystem übergeben wird.
Um diese Ausnahme mit erster Chance zu vermeiden, können Sie manuell garantieren, dass das Eigenschaftenblatt über die richtigen Fensterformatvorlagen verfügt. Sie müssen die folgenden Formatvorlagen für ein Eigenschaftenblatt festlegen:
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
Sie können die folgenden optionalen Formatvorlagen verwenden, ohne eine Ausnahme bei der ersten Chance zu verursachen:
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
Deaktivieren Sie alle anderen Windows-Formatvorlagen, da sie nicht mit Eigenschaftenblättern kompatibel sind. Dieser Rat gilt nicht für erweiterte Formatvorlagen. Wenn Sie diese Standardformatvorlagen entsprechend festlegen, wird sichergestellt, dass das Eigenschaftenblatt nicht geändert werden muss, und verhindert, dass die Ausnahme bei der ersten Chance generiert wird.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertySheet::AddPage
.
CPropertySheet::EnableStackedTabs
Gibt an, ob Zeilen von Registerkarten in einem Eigenschaftenblatt gestapelt werden sollen.
void EnableStackedTabs(BOOL bStacked);
Parameter
bStacked
Gibt an, ob gestapelte Registerkarten im Eigenschaftenblatt aktiviert sind. Deaktivieren Sie gestapelte Zeilen mit Tags durch Festlegen bStacked
auf FALSE
.
Hinweise
Wenn ein Eigenschaftenblatt standardmäßig mehr Registerkarten enthält, als in eine einzelne Zeile in der Breite des Eigenschaftenblatts passen, werden die Registerkarten in mehreren Zeilen gestapelt. Um Scrollen von Registerkarten anstelle von Stapelregistern zu verwenden, rufen Sie EnableStackedTabs
bStacked
FALSE
vor dem Aufrufen DoModal
oder auf .Create
Sie müssen aufrufen EnableStackedTabs
, wenn Sie ein modales oder ein modusloses Eigenschaftenblatt erstellen. Wenn Sie diese Formatvorlage in eine CPropertySheet
abgeleitete Klasse integrieren möchten, schreiben Sie einen Nachrichtenhandler für WM_CREATE
. Rufen Sie EnableStackedTabs( FALSE )
in der überschriebenen Version von CWnd::OnCreate
, bevor Sie die Basisklassenimplementierung aufrufen.
Beispiel
int CMyPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// Set for Scrolling Tabs style
EnableStackedTabs(FALSE);
// Call the base class
if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
CPropertySheet::EndDialog
Beendet das Eigenschaftenblatt.
void EndDialog(int nEndID);
Parameter
nEndID
Bezeichner, der als Rückgabewert des Eigenschaftenblatts verwendet werden soll.
Hinweise
Diese Memberfunktion wird vom Framework aufgerufen, wenn die Schaltfläche "OK", "Abbrechen" oder "Schließen" gedrückt wird. Rufen Sie diese Memberfunktion auf, wenn ein Ereignis auftritt, das das Eigenschaftenblatt schließen soll.
Diese Memberfunktion wird nur mit einem modalen Dialogfeld verwendet.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertySheet::PressButton
.
CPropertySheet::GetActiveIndex
Ruft die Indexnummer der aktiven Seite des Eigenschaftenblattfensters ab und verwendet dann die zurückgegebene Indexnummer als Parameter für GetPage
.
int GetActiveIndex() const;
Rückgabewert
Die Indexnummer der aktiven Seite.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertySheet::GetActivePage
.
CPropertySheet::GetActivePage
Ruft die aktive Seite des Eigenschaftenblattfensters ab.
CPropertyPage* GetActivePage() const;
Rückgabewert
Der Zeiger auf die aktive Seite.
Hinweise
Verwenden Sie diese Memberfunktion, um eine Aktion auf der aktiven Seite auszuführen.
Beispiel
// The code fragment below sets the last active page (i.e. the
// active page when the propertysheet was closed) to be the first
// visible page when the propertysheet is shown. The last active
// page was saved in m_LastActivePage, (a member variable of
// CDocument-derived class) when OK was selected from the
// propertysheet. CMyPropertySheet is a CPropertySheet-derived class.
BOOL CMyPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
SetActivePage(doc->m_LastActivePage);
return bResult;
}
BOOL CMyPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (LOWORD(wParam) == IDOK)
{
CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
doc->m_LastActivePage = GetPageIndex(GetActivePage()); // or GetActiveIndex()
}
return CPropertySheet::OnCommand(wParam, lParam);
}
CPropertySheet::GetPage
Gibt einen Zeiger auf die angegebene Seite in diesem Eigenschaftenblatt zurück.
CPropertyPage* GetPage(int nPage) const;
Parameter
nPage
Index der gewünschten Seite, beginnend bei 0. Muss zwischen 0 und einer kleiner als die Anzahl der Seiten im Eigenschaftenblatt (einschließlich) liegen.
Rückgabewert
Der Zeiger auf die Seite, die dem nPage
Parameter entspricht.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertyPage::OnWizardFinish
.
CPropertySheet::GetPageCount
Bestimmt die Anzahl der Seiten, die sich derzeit im Eigenschaftenblatt befinden.
int GetPageCount() const;
Rückgabewert
Die Anzahl der Seiten im Eigenschaftenblatt.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertyPage::OnWizardFinish
.
CPropertySheet::GetPageIndex
Ruft die Indexnummer der angegebenen Seite im Eigenschaftenblatt ab.
int GetPageIndex(CPropertyPage* pPage);
Parameter
pPage
Verweist auf die Seite, auf der der Index gefunden werden soll. Darf nicht NULL
sein.
Rückgabewert
Die Indexnummer einer Seite.
Hinweise
Beispielsweise würden Sie den Seitenindex verwendenGetPageIndex
, um den Seitenindex zu verwenden oder GetPage
zu verwendenSetActivePage
.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertySheet::GetActivePage
.
CPropertySheet::GetTabControl
Ruft einen Zeiger auf ein Registerkartensteuerelement ab, um eine bestimmte Aktion für das Registerkartensteuerelement auszuführen (d. a. eine der APIs in CTabCtrl
).
CTabCtrl* GetTabControl() const;
Rückgabewert
Ein Zeiger auf ein Registerkartensteuerelement.
Hinweise
Rufen Sie diese Memberfunktion beispielsweise auf, wenn Sie während der Initialisierung Bitmaps zu den einzelnen Registerkarten hinzufügen möchten.
Beispiel
// Create and associate a tooltip control to the tab control of
// CMyTTPropertySheet. CMyTTPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyTTPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
// Create a tooltip control. m_pToolTipCtrl is a member variable
// of type CToolTipCtrl* in CMyTTPropertySheet class. It is
// initialized to NULL in the constructor, and destroyed in the
// destructor of CMyTTPropertySheet class.
m_pToolTipCtrl = new CToolTipCtrl;
if (!m_pToolTipCtrl->Create(this))
{
TRACE(_T("Unable To create ToolTip\n"));
return bResult;
}
// Associate the tooltip control to the tab control
// of CMyPropertySheet.
CTabCtrl* ptab = GetTabControl();
ptab->SetToolTips(m_pToolTipCtrl);
// Get the bounding rectangle of each tab in the tab control of the
// property sheet. Use this rectangle when registering a tool with
// the tool tip control. IDS_FIRST_TOOLTIP is the first ID string
// resource that contains the text for the tool.
int count = ptab->GetItemCount();
int id = IDS_FIRST_TOOLTIP;
for (int i = 0; i < count; i++)
{
CRect r;
ptab->GetItemRect(i, &r);
VERIFY(m_pToolTipCtrl->AddTool(ptab, id, &r, id));
id++;
}
// Activate the tooltip control.
m_pToolTipCtrl->Activate(TRUE);
return bResult;
}
// Override PreTranslateMessage() so RelayEvent() can be
// called to pass a mouse message to CMyTTPropertySheet's
// tooltip control for processing.
BOOL CMyTTPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if (NULL != m_pToolTipCtrl)
m_pToolTipCtrl->RelayEvent(pMsg);
return CPropertySheet::PreTranslateMessage(pMsg);
}
CPropertySheet::m_psh
Eine Struktur, deren Member die Merkmale von PROPSHEETHEADER
.
Hinweise
Verwenden Sie diese Struktur, um die Darstellung des Eigenschaftenblatts zu initialisieren, nachdem es erstellt wurde, aber bevor es mit der DoModal
Memberfunktion angezeigt wird. Legen Sie z. B. das dwSize
Element m_psh
auf die Größe fest, über die das Eigenschaftenblatt verfügen soll.
Weitere Informationen zu dieser Struktur, einschließlich einer Auflistung seiner Mitglieder, finden Sie im PROPSHEETHEADER
Windows SDK.
Beispiel
// This code fragment shows how to change CPropertySheet's settings
// before it is shown. After the changes, CPropertySheet has the
// caption "Simple Properties", no "Apply" button, and the
// second page (CColorPage) initially on top.
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
dlgPropertySheet.m_psh.dwFlags |= PSH_NOAPPLYNOW | PSH_PROPTITLE;
dlgPropertySheet.m_psh.pszCaption = _T("Simple");
dlgPropertySheet.m_psh.nStartPage = 1;
dlgPropertySheet.DoModal();
CPropertySheet::MapDialogRect
Konvertiert die Dialogfeldeinheiten eines Rechtecks in Bildschirmeinheiten.
void MapDialogRect(LPRECT lpRect) const;
Parameter
lpRect
Verweist auf eine Struktur oder CRect
ein RECT
Objekt, die die zu konvertierenden Dialogfeldkoordinaten enthält.
Hinweise
Dialogfeldeinheiten werden in Bezug auf die aktuelle Basiseinheit des Dialogfelds angegeben, die von der durchschnittlichen Breite und Höhe von Zeichen in der Schriftart abgeleitet ist, die für Dialogfeldtext verwendet wird. Eine horizontale Einheit ist ein Viertel der Basisbreiteneinheit des Dialogfelds, und eine vertikale Einheit ist ein Achtel der Basishöheneinheit des Dialogfelds.
Die GetDialogBaseUnits
Windows-Funktion gibt Größeninformationen für die Systemschriftart zurück, Sie können jedoch eine andere Schriftart für jedes Eigenschaftenblatt angeben, wenn Sie die DS_SETFONT Formatvorlage in der Ressourcendefinitionsdatei verwenden. Die MapDialogRect
im Windows SDK beschriebene Windows-Funktion verwendet die entsprechende Schriftart für dieses Dialogfeld.
Die MapDialogRect
Memberfunktion ersetzt die Dialogfeldeinheiten durch lpRect
Bildschirmeinheiten (Pixel), sodass das Rechteck verwendet werden kann, um ein Dialogfeld zu erstellen oder ein Steuerelement innerhalb eines Felds zu positionieren.
CPropertySheet::OnInitDialog
Außerkraftsetzungen zum Erweitern der Initialisierung des Eigenschaftenblatts.
virtual BOOL OnInitDialog();
Rückgabewert
Gibt an, ob die Anwendung den Eingabefokus auf eines der Steuerelemente im Eigenschaftenblatt festgelegt hat. Wenn OnInitDialog
kein Wert zurückgegeben wird, legt Windows den Eingabefokus auf das erste Steuerelement im Eigenschaftenblatt fest. Die Anwendung kann 0 nur zurückgeben, wenn sie den Eingabefokus explizit auf eines der Steuerelemente im Eigenschaftenblatt festgelegt hat.
Hinweise
Diese Memberfunktion wird als Antwort auf die WM_INITDIALOG
Nachricht aufgerufen. Diese Nachricht wird während der Create
Oder-Aufrufe DoModal
an das Eigenschaftenblatt gesendet, die unmittelbar vor der Anzeige des Eigenschaftenblatts auftreten.
Überschreiben Sie diese Memberfunktion, wenn Sie eine spezielle Verarbeitung ausführen müssen, wenn das Eigenschaftenblatt initialisiert wird. Rufen Sie in der überschriebenen Version zuerst die Basisklasse OnInitDialog
auf, ignorieren Sie jedoch den Rückgabewert. Normalerweise werden Sie von der überschriebenen Memberfunktion zurückgegeben TRUE
.
Sie benötigen keinen Meldungszuordnungseintrag für diese Memberfunktion.
CPropertySheet::PressButton
Simuliert die Auswahl der angegebenen Schaltfläche in einem Eigenschaftenblatt.
void PressButton(int nButton);
Parameter
nButton
nButton
: Gibt die Taste an, die gedrückt werden soll. Dieser Parameter kann einen der folgenden -Werte aufweisen:
PSBTN_BACK
Wählt die Schaltfläche "Zurück" aus.PSBTN_NEXT
Wählt die Schaltfläche "Weiter" aus.PSBTN_FINISH
Wählt die Schaltfläche "Fertig stellen" aus.PSBTN_OK
Wählt die Schaltfläche "OK" aus.PSBTN_APPLYNOW
Wählt die Schaltfläche "Jetzt anwenden" aus.PSBTN_CANCEL
Wählt die Schaltfläche "Abbrechen" aus.PSBTN_HELP
Wählt die Schaltfläche "Hilfe" aus.
Hinweise
Weitere Informationen zur Windows SDK-Pressbutton-Meldung finden Sie PSM_PRESSBUTTON
unter.
Ein Aufruf, um PressButton
die PSN_APPLY
Benachrichtigung nicht von einer Eigenschaftenseite an das Framework zu senden. Rufen Sie zum Senden dieser Benachrichtigung an CPropertyPage::OnOK
.
Beispiel
// Simulate the selection of OK and Cancel buttons when Alt+K and
// Alt+C are pressed. CMyPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
{
BOOL altkey = GetKeyState(VK_MENU) < 0;
if (altkey)
{
BOOL handled = TRUE;
switch (toupper((int)pMsg->wParam))
{
case 'C': // for Alt+C - Cancel button
PressButton(PSBTN_CANCEL); // or EndDialog(IDCANCEL);
break;
case 'K': // for Alt+K - OK button
PressButton(PSBTN_OK); // or EndDialog(IDOK);
break;
default:
handled = FALSE;
}
if (handled)
return TRUE;
}
}
return CPropertySheet::PreTranslateMessage(pMsg);
}
CPropertySheet::RemovePage
Entfernt eine Seite aus dem Eigenschaftenblatt und zerstört das zugeordnete Fenster.
void RemovePage(CPropertyPage* pPage);
void RemovePage(int nPage);
Parameter
pPage
Verweist auf die Seite, die aus dem Eigenschaftenblatt entfernt werden soll. Darf nicht NULL
sein.
nPage
Index der zu entfernenden Seite. Muss zwischen 0 und einer kleiner als die Anzahl der Seiten im Eigenschaftenblatt (einschließlich) liegen.
Hinweise
Das CPropertyPage
Objekt selbst wird erst zerstört, wenn der Besitzer des CPropertySheet
Fensters geschlossen wird.
CPropertySheet::SetActivePage
Ändert die aktive Seite.
BOOL SetActivePage(int nPage);
BOOL SetActivePage(CPropertyPage* pPage);
Parameter
nPage
Index der festzulegenden Seite. Sie muss zwischen 0 und einer kleiner sein als die Anzahl der Seiten im Eigenschaftenblatt (einschließlich).
pPage
Verweist auf die Seite, die im Eigenschaftenblatt festgelegt werden soll. Diese darf nicht NULL
sein.
Rückgabewert
Nonzero, wenn das Eigenschaftenblatt erfolgreich aktiviert wird; andernfalls 0.
Hinweise
Verwenden Sie SetActivePage
beispielsweise, wenn die Aktion eines Benutzers auf einer Seite dazu führen soll, dass eine andere Seite zur aktiven Seite wird.
Beispiel
Ein Beispiel hierfür finden Sie unter CPropertySheet::GetActivePage
.
CPropertySheet::SetFinishText
Legt den Text in der Befehlsschaltfläche "Fertig stellen" fest.
void SetFinishText(LPCTSTR lpszText);
Parameter
lpszText
Zeigt auf den Text, der auf der Befehlsschaltfläche "Fertig stellen" angezeigt werden soll.
Hinweise
Aufrufen SetFinishText
, um den Text auf der Befehlsschaltfläche "Fertig stellen" anzuzeigen und die Schaltflächen "Weiter" und "Zurück" auszublenden, nachdem der Benutzer die Aktion auf der letzten Seite des Assistenten abgeschlossen hat.
Beispiel
// CShapePage is the last wizard property page. Enable the Back
// button and change the Next button to Finish. The "Finish" button
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
psheet->SetFinishText(_T("Done"));
return CPropertyPage::OnSetActive();
}
CPropertySheet::SetTitle
Gibt die Beschriftung des Eigenschaftenblatts an (der text, der in der Titelleiste eines Rahmenfensters angezeigt wird).
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0);
Parameter
nStyle
Gibt die Formatvorlage des Eigenschaftenblatttitels an. Die Formatvorlage muss mit 0 oder als PSH_PROPTITLE
angegeben werden. Wenn die Formatvorlage als PSH_PROPTITLE
festgelegt ist, wird das Wort "Eigenschaften" nach dem als Beschriftung angegebenen Text angezeigt. Beispielsweise führt das Aufrufen SetTitle
("Simple", PSH_PROPTITLE
) zu einer Beschriftung des Eigenschaftenblatts "Einfache Eigenschaften".
lpszText
Verweist auf den Text, der als Beschriftung in der Titelleiste des Eigenschaftenblatts verwendet werden soll.
Hinweise
Standardmäßig verwendet ein Eigenschaftenblatt den Beschriftungsparameter im Eigenschaftenblattkonstruktor.
Beispiel
// Declare a CPropertySheet object with a caption "Simple PropertySheet".
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
// Add three pages to the CPropertySheet object. CStylePage, CColorPage,
// and CShapePage are CPropertyPage-derived classes created
// by the Add Class wizard.
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
// Change the caption of the CPropertySheet object
// from "Simple PropertySheet" to "Simple Properties".
dlgPropertySheet.SetTitle(_T("Simple"), PSH_PROPTITLE);
// Show the CPropertySheet object as MODAL.
dlgPropertySheet.DoModal();
CPropertySheet::SetWizardButtons
Aktiviert oder deaktiviert die Schaltfläche "Zurück", "Weiter" oder "Fertig stellen" in einem Eigenschaftenblatt des Assistenten.
void SetWizardButtons(DWORD dwFlags);
Parameter
dwFlags
Eine Reihe von Kennzeichen, die die Funktion und darstellung der Assistentenschaltflächen anpassen. Dieser Parameter kann eine Kombination aus den folgenden Werte sein:
PSWIZB_BACK
Schaltfläche "Zurück"PSWIZB_NEXT
Schaltfläche "Weiter"PSWIZB_FINISH
Schaltfläche "Fertig stellen"PSWIZB_DISABLEDFINISH
Deaktivierte Schaltfläche "Fertig stellen"
Hinweise
Rufen Sie SetWizardButtons
erst nach dem Öffnen des Dialogfelds auf. Sie können vor dem Anruf nicht anrufen SetWizardButtons
DoModal
. In der Regel sollten Sie von SetWizardButtons
CPropertyPage::OnSetActive
.
Wenn Sie den Text auf der Schaltfläche "Fertig stellen" ändern oder die Schaltflächen "Weiter" und "Zurück" ausblenden möchten, nachdem der Benutzer den Assistenten abgeschlossen hat, rufen Sie auf SetFinishText
. Beachten Sie, dass die gleiche Schaltfläche für "Fertig stellen" und "Weiter" freigegeben wird. Sie können eine Schaltfläche "Fertig stellen" oder "Weiter" gleichzeitig anzeigen, aber nicht beides.
Beispiel
Es CPropertySheet
gibt drei Eigenschaftenseiten des Assistenten: CStylePage
, CColorPage
, und CShapePage
. Das folgende Codefragment zeigt, wie sie die Schaltflächen "Zurück" und "Weiter" auf der Eigenschaftenseite des Assistenten aktivieren und deaktivieren.
// CStylePage is the first wizard property page. Disable the Back
// button but enable the Next button.
BOOL CStylePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*) GetParent();
psheet->SetWizardButtons(PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// CColorPage is the second wizard property page. Enable both the
// Back button and the Next button.
BOOL CColorPage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// CShapePage is the last wizard property page. Enable the Back
// button and change the Next button to Finish. The "Finish" button
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
psheet->SetFinishText(_T("Done"));
return CPropertyPage::OnSetActive();
}
CPropertySheet::SetWizardMode
Richtet eine Eigenschaftenseite als Assistenten ein.
void SetWizardMode();
Hinweise
Ein wesentliches Merkmal einer Assistenteneigenschaftsseite besteht darin, dass der Benutzer mithilfe der Schaltflächen "Weiter" oder "Fertig stellen", "Zurück" und "Abbrechen" anstelle von Registerkarten navigiert.
Rufen Sie SetWizardMode
vor dem Anruf DoModal
an. Nach dem Aufruf SetWizardMode
DoModal
wird entweder ID_WIZFINISH
zurückgegeben (wenn der Benutzer mit der Schaltfläche "Fertig stellen" geschlossen wird) oder IDCANCEL
.
SetWizardMode
legt die PSH_WIZARD
Kennzeichnung fest.
Beispiel
CPropertySheet sheet(_T("Simple PropertySheet"));
CStylePage pageStyle;
CColorPage pageColor;
CShapePage pageShape;
sheet.AddPage(&pageStyle);
sheet.AddPage(&pageColor);
sheet.AddPage(&pageShape);
sheet.SetWizardMode();
sheet.DoModal();
Siehe auch
MFC-Beispiel CMNCTRL1
MFC-Beispiel CMNCTRL2
MFC-Beispiel PROPDLG
MFC-Beispiel SNAPVW
CWnd
Klasse
Hierarchiediagramm