Freigeben über


MFC ActiveX-Steuerelemente: Verwenden von Bildern in einem ActiveX-Steuerelement

In diesem Artikel wird der allgemeine Bildtyp und die Implementierung in Ihrem ActiveX-Steuerelement beschrieben. Dabei werden folgende Themen behandelt:

Übersicht über benutzerdefinierte Bildeigenschaften

Ein Bildtyp ist eine Gruppe von Typen, die für einige ActiveX-Steuerelemente gemeinsam sind. Der Bildtyp behandelt Metadateien, Bitmaps oder Symbole und ermöglicht es dem Benutzer, ein Bild anzugeben, das in einem ActiveX-Steuerelement angezeigt werden soll. Benutzerdefinierte Bildeigenschaften werden mithilfe eines Bildobjekts und get/Set-Funktionen implementiert, mit denen der Steuerelementbenutzer auf die Picture-Eigenschaft zugreifen kann. Steuern Sie Benutzer, die auf die benutzerdefinierte Picture-Eigenschaft zugreifen, mithilfe der Bild-Eigenschaftenseite für Aktien.

Neben dem standardmäßigen Bildtyp sind auch Schriftarten- und Farbtypen verfügbar. Weitere Informationen zur Verwendung des Standardschriftarts in Ihrem ActiveX-Steuerelement finden Sie im Artikel MFC ActiveX-Steuerelemente: Verwenden von Schriftarten.

Die ActiveX-Steuerelementklassen stellen mehrere Komponenten bereit, mit deren Hilfe Sie die Picture-Eigenschaft innerhalb des Steuerelements implementieren können. Zu diesen Komponenten gehören:

  • Die CPictureHolder-Klasse .

    Diese Klasse bietet einfachen Zugriff auf das Bildobjekt und die Funktionalität für das Element, das von der benutzerdefinierten Picture-Eigenschaft angezeigt wird.

  • Unterstützung für Eigenschaften vom Typ LPPICTUREDISP, implementiert mit Get/Set-Funktionen.

    Mithilfe der Klassenansicht können Sie schnell eine benutzerdefinierte Eigenschaft oder Eigenschaften hinzufügen, die den Bildtyp unterstützen. Weitere Informationen zum Hinzufügen von ActiveX-Steuerelementeigenschaften mit der Klassenansicht finden Sie im Artikel MFC ActiveX Controls: Properties.

  • Eine Eigenschaftenseite, die die Picture-Eigenschaft oder -Eigenschaften eines Steuerelements bearbeitet.

    Diese Eigenschaftenseite ist Teil einer Gruppe von Aktieneigenschaftenseiten, die für ActiveX-Steuerelemente verfügbar sind. Weitere Informationen zu Eigenschaftenseiten von ActiveX-Steuerelementen finden Sie im Artikel MFC ActiveX Controls: Using Stock Property Pages

Implementieren einer benutzerdefinierten Bildeigenschaft in Ihrem ActiveX-Steuerelement

Wenn Sie die in diesem Abschnitt beschriebenen Schritte abgeschlossen haben, kann das Steuerelement bilder anzeigen, die vom Benutzer ausgewählt wurden. Der Benutzer kann das angezeigte Bild mithilfe einer Eigenschaftenseite ändern, auf der das aktuelle Bild angezeigt wird und über eine Schaltfläche "Durchsuchen" verfügt, über die der Benutzer verschiedene Bilder auswählen kann.

Eine benutzerdefinierte Picture-Eigenschaft wird mithilfe eines Prozesses implementiert, der der Implementierung anderer Eigenschaften ähnelt. Der Hauptunterschied besteht darin, dass die benutzerdefinierte Eigenschaft einen Bildtyp unterstützen muss. Da das Element der Picture-Eigenschaft vom ActiveX-Steuerelement gezeichnet werden muss, müssen eine Reihe von Ergänzungen und Änderungen an der Eigenschaft vorgenommen werden, bevor es vollständig implementiert werden kann.

Um eine benutzerdefinierte Picture-Eigenschaft zu implementieren, müssen Sie die folgenden Schritte ausführen:

Ergänzungen zu Ihrem Steuerelementprojekt

Um die Eigenschaftenseiten-ID für die Standardmäßige Picture-Eigenschaftenseite hinzuzufügen, fügen Sie die folgende Zeile nach dem makro BEGIN_PROPPAGEIDS in die Steuerelementimplementierungsdatei ein (. CPP):

PROPPAGEID(CLSID_CPicturePropPage)

Sie müssen auch den Count-Parameter ihres BEGIN_PROPPAGEIDS Makros um eins erhöhen. In der folgenden Zeile wird dies veranschaulicht:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Um das CPictureHolder Datenmemm der Steuerelementklasse hinzuzufügen, fügen Sie die folgende Zeile unter dem geschützten Abschnitt der Steuerelementklassendeklaration in die Steuerelementkopfzeilendatei ein (. H):

CPictureHolder    m_pic;

Es ist nicht erforderlich, Ihr Datenmitglied m_pic zu benennen; jeder Name reicht aus.

Fügen Sie als Nächstes eine benutzerdefinierte Eigenschaft hinzu, die einen Bildtyp unterstützt:

So fügen Sie eine benutzerdefinierte Bildeigenschaft mithilfe des Assistenten zum Hinzufügen von Eigenschaften hinzu

  1. Laden Sie das Projekt Ihres Steuerelements.

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

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

  4. Wählen Sie im Kontextmenü "Hinzufügen" und dann "Eigenschaft hinzufügen" aus.

  5. Geben Sie im Feld "Eigenschaftsname " den Eigenschaftennamen ein. In diesem Verfahren wird z. B ControlPicture . verwendet.

  6. Wählen Sie im Feld "Eigenschaftentyp " für den Eigenschaftentyp "IPictureDisp"* aus.

  7. Klicken Sie für den Implementierungstyp auf "Get/Set-Methoden".

  8. Geben Sie eindeutige Namen für Ihre Get- und Set-Funktionen ein, oder akzeptieren Sie die Standardnamen. (In diesem Beispiel werden die Standardnamen GetControlPictureSetControlPicture verwendet.)

  9. Klicken Sie auf Fertig stellen.

Der Assistent zum Hinzufügen von Eigenschaften fügt den folgenden Code zwischen den Verteilerzuordnungskommentaren im Steuerelementheader hinzu (. H) Datei:

IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);

Darüber hinaus wurde der folgende Code in die Verteilerzuordnung der Steuerelementimplementierung eingefügt (. CPP)-Datei:

DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
   GetControlPicture, SetControlPicture, VT_PICTURE)

Der Assistent zum Hinzufügen von Eigenschaften fügt außerdem die folgenden beiden Stubfunktionen in der Steuerelementimplementierungsdatei 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

Ihre Steuerelementklassen- und Funktionsnamen können sich vom obigen Beispiel unterscheiden.

Änderungen am Steuerelementprojekt

Nachdem Sie die erforderlichen Ergänzungen zum Steuerelementprojekt vorgenommen haben, müssen Sie mehrere Funktionen ändern, die sich auf das Rendern ihres ActiveX-Steuerelements auswirken. Diese Funktionen, OnResetState, OnDrawund die Get/Set-Funktionen einer benutzerdefinierten Picture-Eigenschaft befinden sich in der Steuerelementimplementierungsdatei. (Beachten Sie, dass in diesem Beispiel die Steuerelementklasse aufgerufen CSampleCtrlwird, das CPictureHolder Datenmemmelement m_pic aufgerufen wird und der Name der benutzerdefinierten Bildeigenschaft . ControlPicture)

Fügen Sie in der Steuerelementfunktion OnResetState die folgende optionale Zeile nach dem Aufruf hinzu COleControl::OnResetState:

m_pic.CreateEmpty();
m_pic.CreateEmpty();

Dadurch wird das Bild des Steuerelements auf ein leeres Bild festgelegt.

Um das Bild ordnungsgemäß zu zeichnen, rufen Sie CPictureHolder::Render in der Steuerelementfunktion OnDraw auf. Ändern Sie Ihre Funktion so, dass sie dem folgenden Beispiel ähnelt:

void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
   if (!pdc)
      return;

   m_pic.Render(pdc, rcBounds, rcBounds);
}

Fügen Sie in der Get-Funktion der benutzerdefinierten Bildeigenschaft des Steuerelements die folgende Zeile hinzu:

return m_pic.GetPictureDispatch();
return m_pic.GetPictureDispatch();

Fügen Sie in der Set-Funktion der benutzerdefinierten Picture-Eigenschaft des Steuerelements die folgenden Zeilen hinzu:

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

Die Bildeigenschaft muss dauerhaft erstellt werden, damit zur Entwurfszeit hinzugefügte Informationen zur Laufzeit angezeigt werden. Fügen Sie der Funktion - COleControlabgeleitete Klasse DoPropExchange die folgende Zeile hinzu:

PX_Picture(pPX, _T("ControlPicture"), m_pic);

Hinweis

Die Klassen- und Funktionsnamen können sich vom obigen Beispiel unterscheiden.

Nachdem Sie die Änderungen abgeschlossen haben, erstellen Sie Ihr Projekt neu, um die neue Funktionalität der benutzerdefinierten Picture-Eigenschaft zu integrieren und den Testcontainer zum Testen der neuen Eigenschaft zu verwenden. Informationen zum Zugriff auf den Testcontainer finden Sie unter Testen von Eigenschaften und Ereignissen mit dem Testcontainer .

Siehe auch

MFC ActiveX-Steuerelemente
MFC ActiveX-Steuerelemente: Verwenden von Schriftarten
MFC ActiveX-Steuerelemente: Eigenschaftenseiten