Partager via


Contrôles ActiveX MFC : Utilisation des images dans un contrôle ActiveX

Cet article décrit le type commun d'image et comment l'implémenter dans votre contrôle ActiveX. Les rubriques traitées ici sont les suivantes :

  • Présentation des propriétés de l'image personnalisées

  • Implémenter une propriété d'image personnalisée dans votre contrôle ActiveX

  • Ajouts à votre projet de contrôle

Présentation des propriétés de l'image personnalisées

Un type d'image est l'un des groupes de types courants à certains contrôles ActiveX. Le type d'image gère les métafichiers, les bitmaps, ou icônes et permet à l'utilisateur de spécifier une image à afficher dans un contrôle ActiveX. Les propriétés de l'image personnalisée sont implémentées selon un objet image et des fonctions d'obtention ou définition qui permettent l'accès de contrôle de l'utilisateur à la propriété image. Les utilisateurs du contrôle accèdent à la propriété de l'image personnalisée à l'aide de la page de propriétés d'image.

En plus du type d'image standard, les types de police et de couleur sont également disponibles. Pour plus d'informations sur l'utilisation de la police standard dans le contrôle ActiveX, consultez l'article Contrôles ActiveX MFC : Utilisation des polices.

Les classes de contrôle ActiveX fournissent plusieurs composants que vous pouvez utiliser pour implémenter la propriété d'image dans le contrôle. Ces composants incluent:

  • La classe d' CPictureHolder.

    Cette classe fournit un accès aisé à l'objet image et aux fonctionnalités de l'élément affiché par la propriété image personnalisée.

  • La prise en charge des propriétés de type LPPICTUREDISP, exécutées avec le obtenir/ensemble s'exécute.

    Utilisation de l'Affichage de classes vous pouvez ajouter rapidement une propriété personnalisée, ou des propriétés, qui prend en charge le type d'image. Pour plus d'informations sur les propriétés du contrôle ActiveX d'ajouter à l'Affichage des classes, consultez l'article Contrôles ActiveX MFC : Propriétés.

  • Une page de propriétés qui manipule la propriété image ou les propriétés d'un contrôle.

    Cette page de propriétés fait partie d'un groupe de pages de propriétés stock disponibles aux contrôles ActiveX. Pour plus d'informations sur les pages de propriétés du contrôle ActiveX, consultez l'article Contrôles ActiveX MFC : En utilisant les pages de propriétés stock

Implémenter une propriété d'image personnalisée dans votre contrôle ActiveX

Lorsque vous avez terminé les étapes indiquées dans cette section, le contrôle peut afficher des images choisies par l'utilisateur. L'utilisateur peut modifier l'image affichée dans une page de propriétés qui indiquent l'image actuelle et un bouton qui permet à l'utilisateur aux différentes images en sélectionnant.

Une propriété image personnalisée est implémentée à l'aide d'un processus similaire à celui utilisé pour l'implémentation d'autres propriétés, la principale différence étant que la propriété personnalisée doit prendre en charge un type d'image. Puisque l'élément de la propriété image doit être dessiné par le contrôle ActiveX, un certain nombre d'ajouts et de modifications doivent être faits à la propriété avant de pouvoir être totalement implémentée.

Pour implémenter une propriété image personnalisée, vous devez effectuer les opérations suivantes :

  • Ajouter du code à votre contrôle de projet.

    Un identificateur standard de propriété image, un membre de données de type CPictureHolder, et une propriété personnalisée de type LPPICTUREDISP avec une implémentation d'obtention/ensemble doivent être ajoutés.

  • Modifiez plusieurs fonctions dans la classe de contrôle.

    Ces modifications sont apportées à plusieurs fonctions qui sont responsables de dessin du contrôle ActiveX.

Ajouts à votre projet de contrôle

Pour ajouter l'ID de propriétés de la page standard de propriété image, insérez la ligne suivante après la macro d' BEGIN_PROPPAGEIDS dans le fichier d'implémentation du contrôle (.CPP) :

PROPPAGEID(CLSID_CPicturePropPage)

Vous devez également incrémenter de 1 le compte de paramètre de la macro BEGIN_PROPPAGEIDS. La ligne suivante illustre ce comportement :

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Pour ajouter le membre de données de CPictureHolder la classe de contrôle, insérez la ligne suivante dans la section protégée par la déclaration de classe de contrôle dans le fichier d'en-tête d'audit (. H) :

CPictureHolder    m_pic;

Il n'est pas nécessaire de nommer le membre de données m_pic; tout nom suffira.

Ensuite, ajoutez une propriété personnalisée qui prend en charge un type d'image :

Pour ajouter une propriété image personnalisée à l'aide de la propriété

  1. Chargez votre projet de contrôle.

  2. Sous Class View, développez l'arborescence de votre librairie.

  3. Cliquez avec le bouton droit sur le nœud de votre interface pour votre contrôle (le deuxième nœud de l'arborescence de la librairie) pour ouvrir le menu contextuel.

  4. Dans le menu du raccourci, cliquez sur Ajouter, puis sur Ajouter une propriété.

  5. Dans la zone Nom de la propriété, entrez le nom de la propriété. À titre d'exemple, ControlPicture est utilisé dans cette procédure.

  6. Dans la zone de Type de propriété, sélectionnez IPictureDisp* pour le type de propriété.

  7. Dans Type d'implémentation, cliquez sur Méthodes Get/Set.

  8. Tapez les noms que vous souhaitez pour les méthodes Get et Set, ou acceptez les noms par défaut. (Dans cet exemple, les noms par défaut GetControlPicture et SetControlPicture sont utilisés.)

  9. Cliquez sur Terminer.

L'assistant d'ajout de propriétés ajoute le code suivant entre les commentaires de dispatch dans le fichier de contrôle de l'en-tête (. H):

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

De plus, le code suivant a été inséré dans la table de dispatch du fichier d'audit de l'implémentation (.CPP) :

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

L'assistant d'ajout de propriétés ajoute également les deux fonctions de stub du fichier d'implémentation du contrôle :

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();
}

Notes

Votre classe et noms de fonctions de contrôle peuvent différer de l'exemple ci-dessus.

Modifications à votre contrôle de projet

Après avoir effectué les ajouts nécessaires à votre projet de contrôle, vous devez modifier plusieurs fonctions qui affectent le rendu de votre contrôle ActiveX. Ces fonctions, OnResetState, OnDraw, et les fonctions d'obtention et de définition d'une propriété image personnalisée, se trouvent dans le fichier d'implémentation du contrôle. (Notez que dans cet exemple la classe de contrôle est appelée CSampleCtrl, le membre de données de CPictureHolder est appelée m_pic, et le nom de la propriété image personnalisée est ControlPicture.)

Dans la fonction de vérification des OnResetState, ajoutez la ligne suivante facultative après l'appel à COleControl::OnResetState:

m_pic.CreateEmpty();

Cela définit l'image du contrôle à une image vide.

Pour ajouter l'image correctement, effectuez un appel à CPictureHolder::Render dans la fonction de vérification des OnDraw. Modifiez votre fonction pour ressembler à l'exemple suivant :

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

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

Dans la fonction Get de la propriété image personnalisée du contrôle, ajoutez la ligne suivante :

return m_pic.GetPictureDispatch();

Dans la fonction Set de la propriété image personnalisée du contrôle, ajoutez les lignes suivantes :

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

La propriété image doit être rendue persistante afin que les informations ajoutées au moment de la conception s'affichent au moment de l'exécution. Ajoutez la ligne suivante à COleControl- fonction dérivée d' DoPropExchange de la classe :

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

Notes

Vos noms et fonctions de classe peuvent différer de l'exemple ci-dessus.

Après avoir terminé les modifications, reconstruisez le projet d'incorporer les nouvelles fonctionnalités de la propriété image personnalisée et d'utiliser Container Test pour tester la nouvelle propriété. Pour plus d'informations sur la manière d'accéder à Test Container, consultez Test des propriétés et des événements à l'aide de Test Container.

Voir aussi

Concepts

Contrôles ActiveX MFC

Contrôles ActiveX MFC : Utilisation des polices

Contrôles ActiveX MFC : pages de propriétés