Schritt 6: Hinzufügen einer Eigenschaftenseite

Eigenschaftenseiten werden als separate COM-Objekte implementiert, die nach Bedarf können freigegeben werden können.In diesem Schritt führen Sie die folgenden Aufgaben, eine Eigenschaftenseite zum - Steuerelement hinzuzufügen:

  • Erstellen der Eigenschaftenseiten-Ressource

  • Code hinzufügen, um die Eigenschaftenseite zu erstellen und zu verwalten

  • Hinzufügen der Eigenschaftenseite an das Steuerelement

Erstellen der Eigenschaftenseiten-Ressource

Um eine Eigenschaftenseite dem Steuerelement hinzuzufügen, verwenden Sie den ATL-Assistentenzum Hinzufügen von Klassen.

So fügen Sie eine Eigenschaftenseite hinzufügen

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf, Polygon.

  2. Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Klasse hinzufügen.

  3. Ziehen Sie aus der Liste der Vorlagen, von Auswahl- ATL-Eigenschaftenseite und von auf Hinzufügen.

  4. Wenn der ATL-Eigenschaftenseiten-Assistent angezeigt wird, geben Sie PolyProp als der Kurz Name ein.

  5. Klicken Sie auf Zeichenfolgen, um die Seite zu öffnen Zeichenfolgen und &Polygon als Titel einzugeben.

    Titel der Eigenschaftenseite ist die Zeichenfolge, die auf der Registerkarte für diese Seite angezeigt wird.Dokumentzeichenfolge ist eine Beschreibung, die ein Eigenschaftenrahmen verwendet, um in eine Statuszeile oder QuickInfos einzufügen.Beachten Sie, dass der Standardeigenschaftenrahmen derzeit nicht diese Zeichenfolge verwendet, sodass Sie sie mit dem Standardinhalt lassen.Sie generieren nicht Hilfedatei zum Zeitpunkt, und löschen Sie den Eintrag in diesem Textfeld.

  6. Klicken Sie auf Fertig stellen und das Eigenschaftenseitenobjekt wird erstellt.

Die folgenden drei Dateien werden erstellt:

Datei

Description

PolyProp.h

Enthält die CPolyProp C++-Klasse, die die Eigenschaftenseite implementiert.

PolyProp.cpp

Enthält die PolyProp.h-Datei ein.

PolyProp.rgs

Das Registrierungsskript, das das Eigenschaftenseitenobjekt registriert.

Die folgenden Codeänderungen übernommen werden:

  • Die neue Eigenschaftenseite wird zur Objekteintragszuordnung in Polygon.cpp hinzugefügt.

  • Die PolyProp-Klasse wird zur Polygon.idl-Datei hinzugefügt.

  • Die neue Registrierungsskriptdatei PolyProp.rgs wird zur Projektressource hinzugefügt.

  • Eine Dialogfeldvorlage wird zur Projektressource für die Eigenschaftenseite hinzugefügt.

  • Die Eigenschaftzeichenfolgen, dass Sie angegeben haben, werden dem Ressourcenzeichenfolgentabelle hinzugefügt.

Fügen Sie jetzt die Felder hinzu, die Sie auf der Eigenschaftenseite angezeigt werden sollen.

Weitere Felder der Eigenschaftenseite hinzufügen

  1. Klicken Sie im Projektmappen-Explorer, doppelklicken Sie auf die Polygon.rc-Ressourcendatei.Hierdurch wird Ressourcenansicht.

  2. Erweitern Sie in der Ressourcenansicht den Dialogknoten und doppelklicken Sie auf IDD_POLYPROP.Beachten Sie, dass das Dialogfeld, das angezeigt wird, mit Ausnahme einer Bezeichnung leer ist, die Ihnen erläutert, um die Steuerelemente hier einzufügen.

  3. Wählen Sie diese Bezeichnung aus und ändern Sie sie, um Seiten: lesen, indem Sie den Beschriftung Text Eigenschaften im Fenster ändern.

  4. Ändern Sie das Bezeichnungsfeld xxxx 1, sodass die Größe des Texts anpasst.

  5. Ziehen Sie ein Bearbeitungssteuerelement aus der Toolbox auf der rechten Seite der Bezeichnung.

  6. Ändern Sie abschließend ID des Bearbeitungssteuerelements annehmen IDC_SIDES mithilfe des Eigenschaftenfensters.

Dies schließt die Erstellung der Eigenschaftenseitenressource ab.

Code hinzufügen, um die Eigenschaftenseite zu erstellen und zu verwalten

Nachdem Sie die Eigenschaftenseitenressource erstellt haben, müssen Sie den Implementierungscode schreiben.

Zunächst können Sie die CPolyProp-Klasse, um die Anzahl vonseiten im Objekt festzulegen, wenn die Schaltfläche Übernehmen gedrückt wird.

Um das zugewiesen ändern arbeiten Sie die Anzahl vonseiten festzulegen

  • Ersetzen Sie die Apply-Funktion in PolyProp.h durch folgenden Code:

    STDMETHOD(Apply)(void)
    {
       USES_CONVERSION;
       ATLTRACE(_T("CPolyProp::Apply\n"));
       for (UINT i = 0; i < m_nObjects; i++)
       {
          CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]);
          short nSides = (short)GetDlgItemInt(IDC_SIDES);
          if FAILED(pPoly->put_Sides(nSides))
          {
             CComPtr<IErrorInfo> pError;
             CComBSTR strError;
             GetErrorInfo(0, &pError);
             pError->GetDescription(&strError);
             MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
             return E_FAIL;
          }
       }
       m_bDirty = FALSE;
       return S_OK;
    }
    

Eine Eigenschaftenseite kann mehr als einen Client, der gleichzeitig zu deren, sodass, die angefügt werden Apply-Funktionsschleifen haben herum und ruft put_Sides auf jedem Client mit dem Wert auf, der vom Eingabefeld abgerufen wird.Sie verwenden die CComQIPtr-Klasse, die QueryInterface auf jedem Objekt ausführt, um die IPolyCtl-Schnittstelle aus der IUnknown-Schnittstelle zu erhalten (gespeichert m_ppUnk im Array).

Mit dem Code Überprüfungen jetzt, ob das Festlegen der Eigenschaft Sides tatsächlich funktioniert.Wenn es fehl, wird der Code ein Meldungsfeld an, das Fehlerdetails aus der IErrorInfo-Schnittstelle anzeigt.In der Regel wird ein Container eines Objekts die ISupportErrorInfo-Schnittstelle und ruft InterfaceSupportsErrorInfo zuerst auf, bestimmen, ob das Objekt Einstellungsfehlerinformationen unterstützt.Sie können diese Aufgabe überspringen.

CComPtr hilft Ihnen, indem automatisch die Verweiszählung behandelt, sodass es nicht erforderlich, um Release für die Schnittstelle aufzurufen.CComBSTR können Sie mit BSTR Verarbeitung, deshalb müssen Sie den abschließenden SysFreeString Aufruf nicht ausführen.Außerdem verwenden Sie eine der verschiedenen Zeichenkonvertierungsklassen, sodass Sie BSTR ggf. konvertieren (daher ist das USES_CONVERSION-Makro am Anfang der Funktion).

Sie müssen auch das geänderte Flag der Eigenschaftenseite festlegen, um anzugeben, dass die Schaltfläche Übernehmen aktiviert werden soll.Dies tritt auf, wenn der Benutzer den Wert im Eingabefeld Seiten ändert.

Um die übernehmensschaltfläche behandeln

  1. Klicken Sie in der Klassenansicht auf CPolyProp mit der rechten Maustaste auf und klicken Sie auf Eigenschaften im Kontextmenü.

  2. Klicken Sie im Eigenschaftenfenster auf das Symbol Ereignisse.

  3. Erweitern Sie die Liste IDC_SIDES Knotens im Ereignishandler.

  4. Wählen Sie EN_CHANGE aus, und klicken Sie im Dropdownmenü rechts auf <Hinzufügen> OnEnChangeSides.Die OnEnChangeSides-Handlerdeklaration wird zu Polyprop.h und der Handlerimplementierung zu Polyprop.cpp hinzugefügt.

Als Nächstes ändern Sie den Handler.

Um die OnEnChangeSides-Methode ändern

  • Fügen Sie folgenden Code in Polyprop.cpp der OnEnChangeSides-Methode hinzu (Code aus der der Assistent dort abgelegt):

    LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, 
       HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
       SetDirty(TRUE);
    
       return 0;
    }
    

OnEnChangeSides wird aufgerufen, wenn eine WM_COMMAND Meldung mit der EN_CHANGE Benachrichtigung für das Steuerelement IDC_SIDES gesendet wird.OnEnChangeSides ruft dann SetDirty auf und übergibt TRUE, um die Eigenschaftenseite anzugeben ist jetzt geändert und die Schaltfläche Übernehmen sollte aktiviert werden.

Hinzufügen der Eigenschaftenseite an das Steuerelement

Der ATL-Assistentzum Hinzufügen von Klassen und der ATL-Eigenschaftenseiten-Assistent fügen die Eigenschaftenseite nicht dem Steuerelement automatisch hinzu, dass es mehrere Steuerelemente im Projekt geben kann.Sie müssen einen Eintrag der Eigenschaftenzuordnung des Steuerelements hinzufügen.

Um die Eigenschaftenseite hinzufügen

  • Öffnen Sie PolyCtl.h und fügen Sie diese Zeile der Eigenschaftenzuordnung hinzu:

    PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
    

Die Eigenschaftenzuordnung des Steuerelements sieht nun wie folgt aus:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
   PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
   PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
   // Example entries
   // PROP_ENTRY("Property Description", dispid, clsid)
   // PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Sie können ein Makro mit PROP_PAGE CLSID der Eigenschaftenseite hinzugefügt wurden, aber, wenn Sie das PROP_ENTRY-Makro wie gezeigt verwenden, wird der Sides-Eigenschaftswert auch gespeichert, wenn das Steuerelement gespeichert wird.

Die drei Parameter an das Makro sind die Eigenschaftenbeschreibung, den DISPID der Eigenschaft und die CLSID der Eigenschaftenseite, die die Eigenschaft dafür verfügt.Dies ist nützlich, wenn beispielsweise laden Sie das Steuerelement in Visual Basic und die Anzahl vonseiten zur Entwurfszeit fest.Da die Anzahl der Seiten gespeichert wird, wenn Sie das Visual Basic-Projekt erneut laden, wird die Anzahl vonseiten wiederhergestellt.

Erstellen und Testen des Steuerelements

Jetzt erstellen Sie dieses Steuerelement und fügen Sie sie in Testcontainer für ActiveX-Steuerelemente ein.im Testcontainer auf dem Menü Bearbeiten, auf PolyCtl-Klassenobjekt.Die Eigenschaftenseite wird; Klicken Sie auf die Registerkarte Polygon.

Die Schaltfläche Übernehmen wird zunächst deaktiviert.Starten Sie die Eingabe eines Werts im Feld Seiten und die Schaltfläche Übernehmen ist aktiviert.Nachdem Sie beendet haben, den Wert anzugeben, klicken Sie auf die Schaltfläche Übernehmen.Die Kontrollanzeigeänderungen und die Schaltfläche Übernehmen wird erneut deaktiviert.Versuch, der einen ungültigen Wert eingibt.Es wird ein Meldungsfeld, die Fehlerbeschreibung zu enthalten dass Sie die von der put_Sides-Funktion.

Als Nächstes fügen Sie das Steuerelement auf eine Webseite.

Zurück zu Schritt 5 | Klicken Sie zu Schritt 7

Siehe auch

Referenz

ATL-Lernprogramm