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 den Untertitel 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 CDialogwird, 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 CPropertySheetder 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 SetWizardButtonsdie 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

CObject

CCmdTarget

CWnd

CPropertySheet

Anforderungen

Headerafxdlgs.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::GetParentauf, 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
DIE ID der Untertitel, die für das Eigenschaftenblatt verwendet werden soll.

pParentWnd
Zeigen Sie auf das übergeordnete Fenster des Eigenschaftenblatts. Wenn NULLdas übergeordnete Fenster das Standard Fenster 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 Untertitel 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 Untertitel Leiste für das Eigenschaftenblatt platziert.

Sie können Wasserzeichen und/oder Kopfzeilenbilder automatisch anzeigen, wenn Sie die dritten oder vierten Prototypen von Constructoben aufgeführten verwenden und gültige Werte für die hbmWatermarkParameter , hpalWatermarkund /oder hbmHeader parameter übergeben.

Beispiel

Im folgenden Beispiel wird veranschaulicht, unter welchen Umständen Sie aufrufen Constructwü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
DIE ID der Untertitel, die für das Eigenschaftenblatt verwendet werden soll.

pParentWnd
Verweist auf das übergeordnete Fenster des Eigenschaftenblatts. Wenn NULLdas übergeordnete Fenster das Standard Fenster 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 Untertitel enthält, die für das Eigenschaftenblatt verwendet werden sollen. 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 Untertitel Leiste 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 CPropertySheetoben verwenden und gültige Werte für die hbmWatermarkParameter , hpalWatermarkund /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 NULLdas ü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::DestroyWindowdas 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

Sehen Sie sich das Beispiel für 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 EnableStackedTabsbStackedFALSE 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 CPropertySheetabgeleitete 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

Sehen Sie sich das Beispiel für 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

Sehen Sie sich das Beispiel für 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

Sehen Sie sich das Beispiel für 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

Sehen Sie sich das Beispiel für 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 GetPagezu verwendenSetActivePage.

Beispiel

Sehen Sie sich das Beispiel für 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

Sehen Sie sich das Beispiel für 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 Untertitel 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_PROPTITLEangegeben werden. Wenn die Formatvorlage als PSH_PROPTITLEfestgelegt ist, wird das Wort "Eigenschaften" nach dem als Untertitel angegebenen Text angezeigt. Beispielsweise führt das Aufrufen SetTitle("Simple", PSH_PROPTITLE) zu einem Eigenschaftenblatt Untertitel von "Simple Properties".

lpszText
Verweist auf den Text, der als Untertitel in der Titelleiste des Eigenschaftenblatts verwendet werden soll.

Hinweise

Standardmäßig verwendet ein Eigenschaftenblatt den Untertitel Parameter 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 der 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 SetWizardButtonsDoModal. In der Regel sollten Sie von SetWizardButtonsCPropertyPage::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 DoModalan. Nach dem Aufruf SetWizardModeDoModal 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