MFC-ActiveX-Steuerelemente: Verwenden der Bilder in einem ActiveX-Steuerelement
In diesem Artikel werden die allgemeinen Typ Bild und wie sie im ActiveX-Steuerelement implementiert.Folgende Themen werden behandelt:
Übersicht über benutzerdefinierte Bild-Eigenschaften
Eine benutzerdefinierte Bild-Eigenschaft im ActiveX-Steuerelement implementieren
Hinzufügungen auf das Steuerelementprojekt
Übersicht über benutzerdefinierte Bild-Eigenschaften
Ein Bild des Arrays entspricht einer Gruppe von Typen, die in ActiveX-Steuerelemente gemeinsam sind.Der Typ der Grafik behandelt Metadateien oder Symbole, Bitmaps und ermöglicht dem Benutzer ein in einem ActiveX-Steuerelement anzuzeigende Bild anzugeben.Benutzerdefinierte Bild Eigenschaften werden mithilfe eines Bilds Objekts und Get/Set-Funktionen implementiert, die anwenderzugriff Eigenschaft des Steuerelements auf Bild.Steuerelements zugreifen Benutzer die benutzerdefinierte Eigenschaft Bild mithilfe der vordefinierten Eigenschaftenseite Bild.
Zusätzlich zu den standardmäßigen bild " Schriftarten und Farben Typen sind ebenfalls verfügbar.Weitere Informationen zur Verwendung des standardmäßigen schriftarttyps im ActiveX-Steuerelement finden Sie im Artikel MFC-ActiveX-Steuerelemente: Verwenden von Schriftarten.
Die ActiveX-Steuerelement-Klassen stellen einige Komponenten, die Sie verwenden können, um die Eigenschaft Bild innerhalb des Steuerelements zu implementieren.Diese Komponenten sind möglich:
Die CPictureHolder-Klasse.
Diese Klasse stellt einen einfachen Zugriff auf das Bild Objekt und Funktionen für das Element bereit, das von der benutzerdefinierten Eigenschaft Bild angezeigt wird.
Unterstützung für die Eigenschaften des Typs LPPICTUREDISP implementiert, mit Get/Set funktioniert.
Verwenden der Klassenansicht können Sie schnell Eigenschaften oder eine benutzerdefinierte Eigenschaft hinzu, die den Typ des Bilds unterstützt.Weitere Informationen zum Hinzufügen von ActiveX-Steuerelement-Eigenschaften with Class View finden Sie im Artikel MFC-ActiveX-Steuerelemente: Eigenschaften.
Eine Eigenschaftenseite, die Eigenschaft Bild oder Eigenschaften eines Steuerelements behandelt.
Diese Eigenschaftenseite ist Teil einer Gruppe vordefinierter Eigenschaftenseiten, die ActiveX-Steuerelemente verfügbar sind.Weitere Informationen zu ActiveX-Steuerelement-Eigenschaftenseiten finden Sie im Artikel MFC-ActiveX-Steuerelemente: Verwenden von vordefinierten Eigenschaftenseite
Eine benutzerdefinierte Bild-Eigenschaft im ActiveX-Steuerelement implementieren
Wenn Sie die Schritte abgeschlossen haben, die in diesem Abschnitt erläutert werden, kann das Steuerelement die Bilder anzeigen, die vom Benutzer ausgewählt werden.Der Benutzer kann die Bildschirmdarstellung mithilfe einer Eigenschaftenseite ändern, die das aktuelle Bild anzeigt und weist Schaltfläche Durchsuchen, die den Benutzer ausgewählten verschiedenen Bildern gestattet.
Eine benutzerdefinierte Bild - Eigenschaft wird unter Verwendung eines Prozesses implementiert, der zum ähnelt, der zum Implementieren anderer Eigenschaften der Hauptunterschied verwendet wird, ist der, dass die benutzerdefinierte Eigenschaft einen Typ Grafik unterstützen muss.Das Element der Eigenschaft vom ActiveX-Steuerelement Bild gezeichnet werden muss, müssen einige Hinzufügungen und Änderungen an die Eigenschaft festgelegt werden, bevor diese vollständig implementiert werden kann.
Um eine benutzerdefinierte Eigenschaft Grafik zu implementieren, müssen Sie wie folgt vorgehen:
Fügen Sie Code hinzu, das Steuerelementprojekt.
Eine standardmäßige Eigenschaftenseite bild ID ein Datenmember des Typs CPictureHolder und eine benutzerdefinierte Eigenschaft des Typs LPPICTUREDISP mit einer Get/Set-Implementierung hinzugefügt werden müssen.
Ändern Sie einige Funktionen in der Steuerelementklasse.
Diese Änderungen werden an einigen Funktionen, die für das Zeichnen des ActiveX-Steuerelements zuständig sind.
Hinzufügungen auf das Steuerelementprojekt
Um die Eigenschaftenseite ID für die Eigenschaftenseite bild hinzuzufügen, fügen Sie die folgende Zeile nach dem BEGIN_PROPPAGEIDS Makro in der implementierungsdatei Steuerelements ein (.CPP):
PROPPAGEID(CLSID_CPicturePropPage)
Sie müssen den Anzahl von Parametern des BEGIN_PROPPAGEIDS auch durch Makros um eins erhöht werden.Die folgende Zeile veranschaulicht dies:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Um den CPictureHolder Datenmember der Steuerelementklasse hinzufügen möchten, fügen Sie die folgende Zeile mit den geschützten Abschnitt der Steuerelementklassen in der Deklaration des Steuerelements (ein headerdatei. H):
CPictureHolder m_pic;
Es ist nicht erforderlich, den Datenmember m_pic zu benennen. Jeder Name erfüllt.
Als Nächstes fügen Sie eine benutzerdefinierte Eigenschaft hinzu, die den Typ des Bilds unterstützt:
So fügen Sie eine benutzerdefinierte Eigenschaft Bild mit dem Assistenten zum Hinzufügen von Eigenschaften hinzufügen
Laden Sie das Projekt des Steuerelements.
Erweitern Sie in der Klassenansicht den Knoten Bibliothek des Steuerelements.
Klicken Sie mit der rechten Maustaste auf den Knoten Schnittstellen für das Steuerelement (der zweite Knoten des Knotens Bibliothek), um das Kontextmenü zu öffnen.
Wählen Sie im Kontextmenü den Befehl Hinzufügen, und klicken Sie dann Eigenschaft hinzufügen aus.
Geben Sie im Feld Eigenschaftenname den Eigenschaftennamen ein.ControlPicture Zwecke, z. B. In dieser Prozedur wird veranschaulicht.
Im Eigenschaftentyp Feld den Eintrag IPictureDisp* für den Eigenschaftentyp.
Für Implementierungstyp Klicken Sie auf Get/Set-Methoden.
Eindeutige Namen des Typs für das Abrufen und legen fest oder Funktionen akzeptieren die Standardnamen.(In diesem Beispiel werden der Standardname GetControlPicture und SetControlPicture verwendet.)
Klicken Sie auf Fertig stellen.
Der Assistent zum Hinzufügen von Eigenschaften fügen Sie den folgenden Code zwischen den Dispatchzuordnungs kommentaren im Header des Steuerelements (hinzu. H) Datei:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Außerdem wurde der folgenden Code in die Dispatchzuordnung der Steuerelementimplementierung (.CPP) eingefügt:
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
Der Assistent zum Hinzufügen von Eigenschaften auch die folgenden beiden Stub Funktionen in der implementierungsdatei Steuerelements hinzu:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Hinweis |
---|
Funktionsnamen und die Steuerelementklasse unterscheiden sich möglicherweise im Beispiel oben. |
Änderungen in das Steuerelementprojekt
Nachdem Sie die notwendigen Hinzufügungen auf das Steuerelementprojekt erstellt haben, müssen Sie einige Features ändern, die die Darstellung des ActiveX-Steuerelements auswirken.Diese Funktionen, OnResetState, OnDraw und die Get/Set-Funktionen einer benutzerdefinierten Bild, sind in der Eigenschaft implementierungsdatei Steuerelements.(Beachten Sie, den in diesem Beispiel die Steuerelementklasse CSampleCtrl aufgerufen wird, der CPictureHolder Datenmember m_pic wird aufgerufen, und der benutzerdefinierten Bild eigenschaftsname ist ControlPicture).
In der Steuerelement OnResetState-Funktion fügen Sie die folgende optionale Zeile nach dem Aufruf COleControl::OnResetState hinzu:
m_pic.CreateEmpty();
Dadurch wird das Bild des Steuerelements ein leeres Bild fest.
Um das Bild gezeichnet wird, lassen Sie CPictureHolder::Render ordnungsgemäß in der Steuerelement OnDraw-Funktion einen Aufruf.Ändern Sie Ihre Funktion, um dem folgenden Beispiel ähneln:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
In der Get-Funktion Bild der benutzerdefinierten Eigenschaft des Steuerelements, fügen Sie die folgende Zeile hinzu:
return m_pic.GetPictureDispatch();
In der Option Bild der benutzerdefinierten Funktion Eigenschaft des Steuerelements, fügen Sie die folgenden Zeilen hinzu:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
Das Bild muss permanent Eigenschaft vorgenommen werden, damit die Informationen, die zur Entwurfszeit hinzugefügt wurden, zur Laufzeit veranschaulichen.Fügen Sie die folgende Zeile COleControl- DoPropExchange die abgeleitete Klasse hinzu:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Hinweis |
---|
Funktionsnamen und die Klasse unterscheiden sich möglicherweise aus dem Beispiel oben. |
Nachdem Sie die Änderungen ausgeführt haben, neu erstellen Sie das Projekt, um die neue Funktionalität der benutzerdefinierten Eigenschaft Bild enthält, und Testcontainer zu verwenden, um die neue Eigenschaft zu testen.Informationen zum Zugreifen auf den Testcontainer finden Sie unter Testen von Eigenschaften und Ereignissen mit dem Testcontainer.