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

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

Übersicht über benutzerdefinierte Bildeigenschaften

Der Bildtyp (Picture) gehört zu einer Gruppe von Datentypen, die für einige ActiveX-Steuerelemente verfügbar sind. Dieser Typ behandelt Metadateien, Bitmaps oder Symbole und ermöglicht dem Benutzer die Festlegung eines Bildes, das in einem ActiveX-Steuerelement angezeigt werden soll. Benutzerdefinierte Bildeigenschaften werden mithilfe eines Bildobjekts und der Get-/Set-Funktionen implementiert, die dem Steuerelementbenutzer den Zugriff auf die Bildeigenschaft ermöglichen. Steuerelementbenutzer greifen über die vordefinierten Bildeeigenschaften auf die benutzerdefinierte Bildeigenschaft zu.

Neben dem Standardbildtyp sind auch Schriftart- und Farbtypen 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-Steuerelementklassen stellen mehrere Komponenten bereit, die Sie zum Implementieren der Bildeigenschaft im Steuerelement verwenden können. Zu diesen Komponenten gehören:

  • Die CPictureHolder -Klasse.

    Diese Klasse ermöglicht den einfachen Zugriff auf das Bildobjekt und die Funktionen des Elements, das mittels der benutzerdefinierten Bildeigenschaft angezeigt wird.

  • Unterstützung der Eigenschaften vom Typ LPPICTUREDISP, die mit Get-/Set-Funktionen implementiert wurden.

    In der Klassenansicht können Sie schnell eine oder mehrere benutzerdefinierte Eigenschaften hinzufügen, die den Bildtyp unterstützen. Weitere Informationen zum Hinzufügen von ActiveX-Steuerelementeigenschaften in der Klassenansicht finden Sie unter MFC-ActiveX-Steuerelemente: Eigenschaften.

  • Eine Eigenschaftenseite, über die die Bildeigenschaft(en) eines Steuerelements geändert werden.

    Diese Eigenschaftenseite ist Bestandteil einer Reihe vordefinierter Eigenschaftenseiten, die für ActiveX-Steuerelemente verfügbar sind. Weitere Informationen zu Eigenschaftenseiten von ActiveX-Steuerelementen finden Sie im Artikel MFC-ActiveX-Steuerelemente: Verwenden von vordefinierten Eigenschaftenseiten.

Implementieren einer benutzerdefinierten Bildeigenschaft in das ActiveX-Steuerelement

Nachdem Sie die Schritte in diesem Abschnitt durchgeführt haben, kann das Steuerelement die vom Benutzer ausgewählten Bilder anzeigen. Der Benutzer kann das angezeigte Bild mithilfe einer Eigenschaftenseite ändern, auf der das aktuelle Bild angezeigt wird und die über eine Navigationsschaltfläche verfügt, die dem Benutzer die Auswahl verschiedener Bilder ermöglicht.

Eine benutzerdefinierte Bildeigenschaft wird in einem ähnlichen Prozess wie andere Eigenschaften implementiert. Der Hauptunterschied liegt darin, dass die benutzerdefinierte Eigenschaft einen Bildtyp unterstützen muss. Da das Element der Bildeigenschaft vom ActiveX-Steuerelement dargestellt werden muss, müssen eine Reihe von Zusätzen und Änderungen für die Eigenschaft vorgenommen werden, bevor sie vollständig implementiert werden kann.

Um eine benutzerdefinierte Bildeigenschaft zu implementieren, gehen Sie wie folgt vor:

Zusätze zum 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. Die folgende Zeile veranschaulicht dies:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Um der Steuerelementklasse den CPictureHolder -Datenmember hinzuzufügen, fügen Sie in der Headerdatei des Steuerelements (.H) unter dem protected-Abschnitt der Deklaration der Steuerelementklasse die folgende Zeile ein:

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 mit dem 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. Wählen Sie im Kontextmenü Hinzufügen und dann Eigenschaft hinzufügenaus.

  5. Geben Sie im Feld Eigenschaftsname den Namen der Eigenschaft 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 unter Implementierungstypauf Get/Set-Methoden.

  8. Geben Sie für die Get- und Set-Funktion eindeutige Namen ein, oder übernehmen Sie die Standardnamen. (In diesem Beispiel werden die Standardnamen GetControlPicture und SetControlPicture verwendet.

  9. Klicken Sie auf Fertig stellen.

Der Assistent zum Hinzufügen von Eigenschaften fügt den folgenden Code zwischen den Kommentaren der Dispatchzuordnung in der Headerdatei (.h) des Steuerelements ein:

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

Zusätzlich wurde folgender Code in die Dispatchzuordnung der Implementierungsdatei (.CPP) des Steuerelements eingefügt:

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

Der Assistent zum Hinzufügen von Eigenschaften fügt der Implementierungsdatei des Steuerelements auch die folgenden beiden Stubfunktionen 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

Die von Ihnen verwendeten Steuerelementklassen und Funktionsnamen können von denen im oben genannten Beispiel abweichen.

Änderungen am Steuerelementprojekt

Nachdem Sie dem Steuerelementprojekt die notwendigen Zusätze hinzugefügt haben, müssen Sie mehrere Funktionen ändern, die das Rendern des ActiveX-Steuerelements beeinflussen. Die Funktionen OnResetStateund OnDrawsowie die Get-/Set-Funktionen einer benutzerdefinierten Bildeigenschaft befinden sich in der Implementierungsdatei des Steuerelements. (Beachten Sie, dass in diesem Beispiel die Steuerelementklasse aufgerufen CSampleCtrlwird, das CPictureHolder Datenmemmelement m_pic und der Name der benutzerdefinierten Bildeigenschaft .ControlPicture)

Fügen Sie in der OnResetState -Funktion des Steuerelements hinter dem Aufruf von COleControl::OnResetStatedie folgende optionale Zeile ein:

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

Dadurch wird dem Bild des Steuerelements ein leeres Bild zugewiesen.

Rufen Sie CPictureHolder::Render in der OnDraw -Funktion des Steuerelements auf, um das Bild einwandfrei darzustellen. Ändern Sie die Funktion entsprechend dem folgenden Beispiel:

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 Bildeigenschaft des Steuerelements die folgenden Zeilen hinzu:

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

Die Bildeigenschaft muss persistent sein, damit beim Entwurf hinzugefügte Informationen zur Laufzeit angezeigt werden. Fügen Sie der COleControl-Funktion der von DoPropExchange abgeleiteten Klasse die folgende Zeile hinzu:

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

Hinweis

Die von Ihnen verwendeten Klassen und Funktionsnamen können von denen im oben genannten Beispiel abweichen.

Nachdem Sie die Änderungen vorgenommen haben, erstellen Sie das Projekt neu, um die neue Funktionalität der benutzerdefinierten Bildeigenschaft einzubinden. Testen Sie die neue Eigenschaft dann mit dem Testcontainer. Informationen zum Zugriff auf den Testcontainer finden Sie unter Testen von Eigenschaften und Ereignissen mit dem Testcontainer .

Siehe auch

MFC ActiveX Controls (MFC-ActiveX-Steuerelemente)
MFC-ActiveX-Steuerelemente: Verwenden von Schriftarten
MFC-ActiveX-Steuerelemente: Eigenschaftenseite