Eigenschaftenseiten werden als separate COM-Objekte implementiert die Eigenschaftenseiten gemeinsam verwendet werden, ggf. können. Um dem Steuerelement eine Eigenschaftenseite hinzufügen können Sie den Assistenten für ATL-Objekte.
Starten Sie den Assistenten für ATL-Objekte, und wählen Sie Steuerelemente wie die Kategorie auf der linken Seite. Wählen Sie die Eigenschaftenseite auf der rechten Seite, dann klicken Sie auf weiter.
Sie erhalten wieder das Dialogfeld, dem Sie den Namen des neuen Objekts eingeben. Rufen Sie das Objekt PolyProp und geben Sie diesen Namen im Feld Kurzname bearbeiten.

Beachten Sie, dass das Bearbeitungsfeld Schnittstelle ausgegraut ist. Dies ist da eine Eigenschaftenseite keine benutzerdefinierte Schnittstelle.
Klicken Sie auf der Registerkarte Zeichenfolgen den Titel der Eigenschaftenseite festgelegt. Der Titel der Eigenschaftenseite ist die Zeichenfolge, die in der Registerkarte für die Seite angezeigt wird. Geben Sie &Amp;Polygon als Titel. Die Dokumentzeichenfolge ist eine Beschreibung, die einen Eigenschaftenrahmen verwendet, um in einen Status Linien- oder Tool-Tipp. Beachten Sie, dass standard Eigenschaftenrahmen verwendet diese Zeichenfolge derzeit nicht, aber Sie können es auf jeden Fall einstellen. Du wirst nicht zu generieren eine Helpfile im Moment, so löschen Sie den Eintrag im Textfeld. Klicken Sie auf OK , und die Eigenschaft Page-Objekt erstellt werden.

Die folgenden drei Dateien werden erstellt:
| Datei | Beschreibung |
| PolyProp.h | Die C++-Klasse enthält CPolyProp , die implementiert der Eigenschaftenseite. |
| PolyProp.cpp | Enthält die Datei PolyProp.h. |
| PolyProp.rgs | Das Registrierungsskript, das das Eigenschaft Page-Objekt registriert. |
Auch werden die folgenden Codeänderungen vorgenommen:
PolyProp Klasse zur Datei Polygon.idl hinzugefügt.
Nun fügen Sie die Felder, die Sie auf der Eigenschaftenseite angezeigt werden soll. Beachten Sie, dass in Polygon.rc das Dialogfeld leer, außer für eine Bezeichnung ist, die sagt, Sie Ihre Steuerelemente hier einfügen. Löschen Sie die Beschriftung und fügen enthält den Text "Seiten:". Neben der Bezeichnung fügen ein Bearbeitungsfeld, und geben sie eine ID vonIDC_SIDES.

Enthalten Sie Polygon.h am oberen Rand der Datei PolyProp.h:
# i&nclude "Polygon.h"nbsp; / / Definition der IPolyCtl
Aktivieren Sie jetzt die CPolyProp -Klasse, um die Anzahl der Seiten in Ihrem Objekt festgelegt, wenn die übernehmen -Schaltfläche geklickt wird. Änderung der Apply Funktion in PolyProp.h wie folgt.
STDMETHOD(Apply)(void)
{
DAS USES_CONVERSION;
ATLTRACE(_T("CPolyProp::Apply\n"));
für (UINT ich = 0; ich Lt; M_nObjects; i++)
{
CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]);
kurze nSides = (short)GetDlgItemInt(IDC_SIDES);
Wenn Fehler (pPoly - > put_Sides(nSides))
{
CComPtr <IErrorInfo> pError;
CComBSTR StrError;
GetErrorInfo (0 & pError);
pError - > GetDescription(&strError);
MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
E_FAIL zurück;
}
}
M_bDirty = FALSE;
Gibt S_OK zurück.
}
Eine Eigenschaftenseite konnte mehrere Clients gleichzeitig verbunden haben also die Apply -Funktion in einer Schleife um und ruft put_Sides auf jedem Client mit dem Wert aus dem Eingabefeld abgerufen. Sie verwenden die CComQIPtr -Klasse, die die QueryInterface für jedes Objekt zu erhalten führt die IPolyCtl aus dem IUnknown Schnittstelle (gespeichert der m_ppUnk Array).
Der Code überprüft nun die Einstellung der Seiten tatsächlich geleisteten Arbeitsstunden. Wenn dies fehlschlägt, zeigt der Code ein Meldungsfeld Fehlerdetails aus der IErrorInfo -Schnittstelle. In der Regel ein Container die ISupportErrorInfo -Schnittstelle ein Objekt beantragt und ruft InterfaceSupportsErrorInfo zuerst, um zu bestimmen, ob das Objekt Fehlerinformationen Einstellung unterstützt. Aber da es Ihr Steuerelement handelt, können Sie das Kontrollkästchen verzichten.
CComPtr hilft Ihnen durch die Verweiszählung automatisch behandeln, so brauchen Sie nicht Version auf der Schnittstelle aufrufen. CComBSTR hilft Ihnen mit BSTR Verarbeitung, damit Sie nicht den letzten SysFreeString -Aufruf durchführen. Verwenden Sie auch eine der verschiedenen Zeichenfolgenkonvertierungsklassen, also Sie den BSTR , falls erforderlich umwandeln können (Dies ist, warum wir das USES_CONVERSION -Makro am Anfang der Funktion hinzufügen).
Sie müssen außerdem festlegen, dass die Eigenschaftenseite dirty-Flag an, dass die Schaltfläche übernehmen aktiviert werden soll. Dies tritt auf, wenn der Benutzer den Wert im Feld bearbeiten Seiten ändert. Die Eigenschaft der Page-Klasse (CPolyProp) in der Klassenansicht Maustaste, und wählen Sie dann Windows Message Handler hinzufügen... aus dem Kontextmenü menu.nbsp; Wählen Sie IDC_SIDES aus dem Objekt und fügen Sie dann die &Nachricht EN_CHANGE-Ereignis.
Nun fügen Sie den folgenden Code in Polyprop.h auf die OnChangeSides Funktion (Code, der der Assistenten stellen löschen):
LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
SetDirty(TRUE);
return 0;
}
OnChangeSideswird aufgerufen, wenn eine WM_COMMAND -Nachricht, mit dem EN_CHANGE-Ereignis -Benachrichtigung für gesendet wird die IDC_SIDES Kontrolle. OnChangeSides ruft dann SetDirty auf und übergibt TRUE an die Eigenschaftenseite ist jetzt schmutzig und die Schaltfläche übernehmen aktiviert werden soll.
Nun, fügen Sie die Eigenschaftenseite zu Ihrem Steuerelement hinzu. Den Assistenten für ATL-Objekte tun nicht dies für Sie automatisch, da mehrere Steuerelemente in Ihrem Projekt es könnte. Öffnen Sie PolyCtl.h, und fügen Sie diese Zeile in der Eigenschaftenzuordnung:
PROP_ENTRY ("Seiten", 1, CLSID_PolyProp)
Eigenschaftenzuordnung des Steuerelements sieht nun folgendermaßen aus.:
BEGIN_PROP_MAP(CPolyCtl)
PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
PROP_ENTRY ("Seiten", 1, CLSID_PolyProp)
/ / Beispieleinträge
/ / PROP_ENTRY ("Beschreibung", Dispid, Clsid)
/ / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
Sie könnte hinzugefügt haben ein PROP_PAGE Makro mit der CLSID der Eigenschaftenseite, aber wenn Sie die PROP_ENTRY Makro wie gezeigt, die Seiten-Eigenschaftenwert wird auch gespeichert, wenn das Steuerelement gespeichert ist. Die drei Parameter des Makros sind die Beschreibung, die DISPID der Eigenschaft und die CLSID der Eigenschaftenseite, die die Eigenschaft hat. Dies ist nützlich, wenn zum Beispiel Sie laden Sie das Steuerelement in Visual Basic und die Anzahl der Seiten zur Entwurfszeit festlegen. Da die Anzahl der Seiten gespeichert, wenn Sie Ihre Visual Basic-Projekt die Anzahl der Seiten laden werden wiederhergestellt.
Jetzt bauen Sie, Steuern und fügen Sie Testcontainer für ActiveX-Steuerelemente ein. Im Testcontainer, im Menü Bearbeiten klicken Sie auf Klasse Object PolyCtl. Die Eigenschaftenseite wird angezeigt; Wählen Sie die Registerkarte "Polygon".

Die übernehmen -Schaltfläche zunächst deaktiviert. Start eingeben eines Werts in der Seiten-edit-Feld, und die Schaltfläche Übernehmen aktiviert werden. Nachdem Sie den Wert eingeben haben, klicken Sie auf die Schaltfläche übernehmen . Die Änderungen des Steuerelements anzeigen und die Schaltfläche übernehmen wird wieder deaktiviert. Geben Sie einen ungültigen Wert und es müsste ein Meldungsfeld mit die Fehlerbeschreibung, die Sie von der put_Sides Funktion.
Als nächstes setzen Sie das Steuerelement auf einer Webseite.
Zurück zu Schritt 5 |nbsp; Zu Schritt 7