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 :
Vue d'ensemble des propriétés d'image personnalisées
Implémenter une propriété d'image personnalisée dans votre contrôle ActiveX
Ajouts à votre projet de contrôle
Vue d'ensemble des propriétés d'image personnalisées
Un type d'image est un d'un groupe de types communs à certains contrôles ActiveX.Le type d'image gère des métafichiers, des images, des icônes et permet à l'utilisateur de spécifier une image à afficher dans un contrôle ActiveX.Les propriétés d'image personnalisées sont implémentées à l'aide d'un objet image et des fonctions get/set qui permettent l'accès utilisateur du contrôle à la propriété d'image.Les utilisateurs de contrôle accède à la propriété d'image personnalisée à l'aide de la page de cotations boursières de propriété d'image.
En plus de le type standard d'image, les types de police et de couleur sont également disponibles.Pour plus d'informations sur l'utilisation de polices standard dans votre 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 de CPictureHolder .
Cette classe fournit faciliter l'accès à l'objet image et des fonctionnalités à l'élément restitué par la propriété d'image personnalisée.
La prise en charge des propriétés de type LPPICTUREDISP, implémentées avec le get/set s'exécute.
À l'aide de l'Affichage de classes vous pouvez ajouter rapidement une propriété personnalisée, ou de propriété, qui prend en charge le type d'image.Pour plus d'informations sur les propriétés du contrôle ActiveX d'addition avec l'Affichage de classes, consultez l'article Contrôles ActiveX MFC : propriétés.
Une page de propriétés qui manipule la propriété d'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 : À l'aide de 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 présentées dans cette section, le contrôle peut afficher des images sélectionnées par l'utilisateur.L'utilisateur peut modifier l'image affichée à l'aide d'une page de propriétés qui montre l'image actuelle et possède un bouton Parcourir qui permet l'utilisateur aux différentes images de sélectionner.
Une propriété d'image personnalisée est implémentée à l'aide d'un processus semblable à celle utilisée pour implémenter d'autres propriétés, la principale différence étant que la propriété personnalisée doit prendre en charge un type d'image.Étant donné que l'élément de propriété d'image doit être dessiné par le contrôle ActiveX, un nombre d'ajouts et modifications doivent être apportées à la propriété avant de pouvoir être totalement implémentée.
Pour implémenter une propriété d'image personnalisée, vous devez effectuer les opérations suivantes :
Ajoutez du code à votre projet de contrôle.
Un ID standard de page de propriétés d'image, un membre de données de type CPictureHolder, et une propriété personnalisée de type LPPICTUREDISP avec une implémentation get/set doivent être ajoutés.
modifiez plusieurs fonctions dans votre classe de contrôle.
Ces modifications sont apportées à plusieurs fonctions responsables de dessin de votre contrôle ActiveX.
Ajouts à votre projet de contrôle
Pour ajouter l'ID de page de propriétés pour la page standard de propriété d'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 aussi incrémenter le paramètre de nombre de votre macro d' BEGIN_PROPPAGEIDS par une.La ligne suivante illustre ce comportement :
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Pour ajouter les données membres d' CPictureHolder à la classe de contrôle, insérez la ligne suivante dans la section protégée de la déclaration de classe du contrôle dans le fichier d'en-tête du contrôle (. h) :
CPictureHolder m_pic;
Il n'est pas nécessaire de nommer vos données membre m_pic; n'importe quel nom met en œuvre.
Ensuite, ajoutez une propriété personnalisée qui prend en charge un type d'image :
Pour ajouter une propriété d'image personnalisée à l'aide de l'Assistant Ajout de propriété
Chargez le projet de votre contrôle.
Dans l'Affichage de classes, développez le nœud de la bibliothèque de votre contrôle.
Cliquez avec le bouton droit sur le nœud de l'interface pour votre contrôle (le deuxième nœud du nœud de bibliothèque) pour ouvrir le menu contextuel.
Dans le menu contextuel, sélectionnez Ajouter puis Ajouter une propriété.
Dans la zone de Nom de la propriété , tapez le nom de la propriété.À titre de exemple, ControlPicture est utilisé dans cette procédure.
Dans la zone de Type de propriété , sélectionnez IPictureDisp* pour le type de propriété.
Pour Implementation Type, cliquez sur Get/Set Methods.
Entrez les noms uniques pour votre get et fonctions définies ou acceptez les noms par défaut.(Dans cet exemple, les noms par défaut GetControlPicture et SetControlPicture sont utilisés.)
Cliquez sur Terminer.
L'Assistant Ajout de propriété ajoute le code suivant entre les commentaires de table de dispatch dans l'en-tête de contrôle (. h) fichier :
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
En outre, le code suivant a été inséré dans la table de dispatch du fichier de contrôle de l'implémentation (.CPP) :
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
L'Assistant Ajout de propriété ajoute également les deux fonctions suivantes stub dans le 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();
}
[!REMARQUE]
Votre classe et noms de fonction de contrôle peuvent différer de l'exemple ci-dessus.
Modifications apportées au projet de contrôle
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 get/set d'une propriété d'image personnalisée, sont situés dans le fichier d'implémentation du contrôle.(Notez que dans cet exemple la classe de contrôle est appelé CSampleCtrl, la donnée membre d' CPictureHolder est appelée m_pic, et le nom de propriété d'image personnalisé est ControlPicture.)
Dans la fonction de contrôle d' OnResetState , ajoutez la ligne facultative suivante après l'appel à COleControl::OnResetState:
m_pic.CreateEmpty();
Cela affecte l'image du contrôle une image vide.
L'image doit être correctement, effectuez un appel de CPictureHolder::Render dans la fonction de contrôle d' 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 d'obtention de la propriété d'image personnalisée du contrôle, ajoutez la ligne suivante :
return m_pic.GetPictureDispatch();
Dans la fonction définie de la propriété d'image personnalisée du contrôle, ajoutez les lignes suivantes :
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
La propriété d'image doit être rendue persistante afin que les informations ajoutées au moment de le design apparaissent au moment de l'exécution.Ajoutez la ligne suivante à COleControl- fonction d' DoPropExchange de classe dérivée :
PX_Picture(pPX, _T("ControlPicture"), m_pic);
[!REMARQUE]
Votre classe et noms de fonctions peuvent différer de l'exemple ci-dessus.
Après avoir effectué les modifications, recréez votre projet d'incorporer la nouvelle fonctionnalité de la propriété d'image personnalisée et d'utiliser Test Container 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.