MFC-ActiveX-Steuerelemente: Hinzufügen von benutzerdefinierten Eigenschaften

Benutzerdefinierte Eigenschaften unterscheiden sich von Aktieneigenschaften darin, dass benutzerdefinierte Eigenschaften nicht bereits von der COleControl Klasse implementiert werden. Eine benutzerdefinierte Eigenschaft wird verwendet, um einen bestimmten Zustand oder ein Erscheinungsbild eines ActiveX-Steuerelements für einen Programmierer mithilfe des Steuerelements verfügbar zu machen.

In diesem Artikel wird beschrieben, wie Sie dem ActiveX-Steuerelement mithilfe des Assistenten zum Hinzufügen von Eigenschaften eine benutzerdefinierte Eigenschaft hinzufügen und die resultierenden Codeänderungen erläutern. Dabei werden folgende Themen behandelt:

Benutzerdefinierte Eigenschaften sind in vier Implementierungsvarianten verfügbar: Membervariable, Membervariable mit Benachrichtigung, Get/Set-Methoden und parametrisiert.

  • Implementierung von Membervariablen

    Diese Implementierung stellt den Zustand der Eigenschaft als Membervariable in der Steuerelementklasse dar. Verwenden Sie die Membervariable-Implementierung, wenn es nicht wichtig ist zu wissen, wann sich der Eigenschaftswert ändert. Von den drei Typen erstellt diese Implementierung den geringsten Unterstützungscode für die Eigenschaft. Das Verteilerzuordnungseintragsmakro für die Implementierung von Membervariablen wird DISP_PROPERTY.

  • Membervariable mit Benachrichtigungsimplementierung

    Diese Implementierung besteht aus einer Membervariable und einer Benachrichtigungsfunktion, die vom Assistenten zum Hinzufügen von Eigenschaften erstellt wird. Die Benachrichtigungsfunktion wird automatisch vom Framework aufgerufen, nachdem sich der Eigenschaftswert geändert hat. Verwenden Sie die Membervariable mit der Benachrichtigungsimplementierung, wenn Sie benachrichtigt werden müssen, nachdem sich ein Eigenschaftswert geändert hat. Diese Implementierung erfordert mehr Zeit, da ein Funktionsaufruf erforderlich ist. Das Verteilerzuordnungseintragsmakro für diese Implementierung ist DISP_PROPERTY_NOTIFY.

  • Implementierung von Get/Set-Methoden

    Diese Implementierung besteht aus einem Elementfunktionenpaar in der Steuerelementklasse. Die Implementierung der Get/Set-Methoden ruft automatisch die Get-Member-Funktion auf, wenn der Benutzer des Steuerelements den aktuellen Wert der Eigenschaft und die Set-Memberfunktion anfordert, wenn der Benutzer des Steuerelements anfordert, dass die Eigenschaft geändert wird. Verwenden Sie diese Implementierung, wenn Sie den Wert einer Eigenschaft während der Laufzeit berechnen müssen, einen vom Benutzer des Steuerelements übergebenen Wert überprüfen, bevor Sie die tatsächliche Eigenschaft ändern oder einen schreibgeschützten Eigenschaftstyp implementieren. Das Verteilerzuordnungseintragsmakro für diese Implementierung ist DISP_PROPERTY_EX. Im folgenden Abschnitt wird mithilfe des Assistenten zum Hinzufügen einer benutzerdefinierten Eigenschaft die benutzerdefinierte CircleOffset-Eigenschaft verwendet, um diese Implementierung zu veranschaulichen.

  • Parametrisierte Implementierung

    Die parametrisierte Implementierung wird vom Assistenten zum Hinzufügen von Eigenschaften unterstützt. Eine parametrisierte Eigenschaft (manchmal auch als Eigenschaftenarray bezeichnet) kann verwendet werden, um über eine einzelne Eigenschaft Ihres Steuerelements auf eine Gruppe von Werten zuzugreifen. Das Verteilerzuordnungseintragsmakro für diese Implementierung ist DISP_PROPERTY_PARAM. Weitere Informationen zur Implementierung dieses Typs finden Sie unter Implementieren einer parametrisierten Eigenschaft im Artikel ActiveX-Steuerelemente: Erweiterte Themen.

Verwenden des Assistenten zum Hinzufügen von Eigenschaften zum Hinzufügen einer benutzerdefinierten Eigenschaft

Das folgende Verfahren veranschaulicht das Hinzufügen einer benutzerdefinierten Eigenschaft, CircleOffset, die die Implementierung der Get/Set-Methoden verwendet. Mit der benutzerdefinierten CircleOffset-Eigenschaft kann der Benutzer des Steuerelements den Kreis aus der Mitte des umgebenden Rechtecks des Steuerelements versatz. Das Verfahren zum Hinzufügen von benutzerdefinierten Eigenschaften mit einer anderen Implementierung als Get/Set-Methoden ist sehr ähnlich.

Dieses Verfahren kann auch verwendet werden, um andere benutzerdefinierte Eigenschaften hinzuzufügen, die Sie benötigen. Ersetzen Sie ihren benutzerdefinierten Eigenschaftennamen durch den CircleOffset-Eigenschaftsnamen und -parameter.

So fügen Sie die benutzerdefinierte Eigenschaft CircleOffset mithilfe des Assistenten zum Hinzufügen von Eigenschaften hinzu

  1. Laden Sie das Steuerelementprojekt.

  2. Erweitern Sie in der Klassenansicht den Bibliotheksknoten des Steuerelements.

  3. Klicken Sie mit der rechten Maustaste auf den Schnittstellenknoten des Steuerelements (den zweiten Knoten des Bibliotheksknotens), um das Kontextmenü zu öffnen.

  4. Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Eigenschaft hinzufügen.

    Dadurch wird der Assistent zum Hinzufügen von Eigenschaften geöffnet.

  5. Geben Sie im Feld "Eigenschaftsname" "CircleOffset" ein.

  6. Klicken Sie unter Implementierungstypauf Get/Set-Methoden.

  7. Wählen Sie im Feld "Eigenschaftstyp " die Option shortaus.

  8. Geben Sie eindeutige Namen für Ihre Get- und Set-Funktionen ein, oder akzeptieren Sie die Standardnamen.

  9. Klicken Sie auf Fertig stellen.

Hinzufügen von Eigenschaften-Assistentenänderungen für benutzerdefinierte Eigenschaften

Wenn Sie die benutzerdefinierte CircleOffset-Eigenschaft hinzufügen, nimmt der Assistent zum Hinzufügen von Eigenschaften Änderungen an der Kopfzeile vor (. H) und die Implementierung (. CPP)-Dateien der Steuerelementklasse.

Die folgenden Zeilen werden dem . H-Datei zum Deklarieren von zwei aufgerufenen Funktionen GetCircleOffset und SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

Die folgende Zeile wird dem Steuerelement hinzugefügt. IDL-Datei:

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

Diese Zeile weist der CircleOffset-Eigenschaft eine bestimmte ID-Nummer zu, die von der Position der Methode in der Methoden- und Eigenschaftenliste des Assistenten zum Hinzufügen von Eigenschaften stammt.

Darüber hinaus wird die folgende Zeile der Verteilerkarte (im Folgenden) hinzugefügt. CPP-Datei der Steuerelementklasse) zum Zuordnen der CircleOffset-Eigenschaft zu den beiden Handlerfunktionen des Steuerelements:

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

Schließlich werden die Implementierungen und GetCircleOffsetSetCircleOffset Funktionen am Ende des Steuerelements hinzugefügt. CPP-Datei. In den meisten Fällen ändern Sie die Get-Funktion, um den Wert der Eigenschaft zurückzugeben. Die Set-Funktion enthält in der Regel Code, der entweder vor oder nach änderungen der Eigenschaft ausgeführt werden soll.

void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Beachten Sie, dass der Assistent zum Hinzufügen von Eigenschaften automatisch einen Aufruf zu SetModifiedFlag zum Textkörper der Set-Funktion hinzufügt. Durch Aufrufen dieser Funktion wird das Steuerelement als geändert markiert. Wenn ein Steuerelement geändert wurde, wird der neue Zustand gespeichert, wenn der Container gespeichert wird. Diese Funktion sollte aufgerufen werden, wenn eine Eigenschaft, die als Teil des persistenten Zustands des Steuerelements gespeichert wird, den Wert ändert.

Siehe auch

MFC ActiveX Controls (MFC-ActiveX-Steuerelemente)
MFC-ActiveX-Steuerelemente: Eigenschaften
MFC-ActiveX-Steuerelemente: Methoden
COleControl-Klasse