Partager via


Contrôles ActiveX MFC : ajout de propriétés personnalisées

Les propriétés personnalisées diffèrent des propriétés de stock dans laquelle les propriétés personnalisées ne sont pas déjà implémentées par la COleControl classe. Une propriété personnalisée est utilisée pour exposer un certain état ou apparence d’un contrôle ActiveX à un programmeur à l’aide du contrôle.

Cet article explique comment ajouter une propriété personnalisée au contrôle ActiveX à l’aide de l’Assistant Ajouter une propriété et explique les modifications de code résultantes. Les sujets abordés sont les suivants :

Les propriétés personnalisées sont disponibles en quatre variétés d’implémentation : variable membre, variable membre avec notification, méthodes Get/Set et paramétrables.

  • Implémentation des variables membres

    Cette implémentation représente l’état de la propriété en tant que variable membre dans la classe de contrôle. Utilisez l’implémentation de la variable membre lorsqu’il n’est pas important de savoir quand la valeur de propriété change. Parmi les trois types, cette implémentation crée le moins de code de prise en charge pour la propriété. La macro d’entrée de mappage de répartition pour l’implémentation de variable membre est DISP_PROPERTY.

  • Variable membre avec implémentation de notification

    Cette implémentation se compose d’une variable membre et d’une fonction de notification créée par l’Assistant Ajouter une propriété. La fonction de notification est automatiquement appelée par l’infrastructure après la modification de la valeur de propriété. Utilisez la variable membre avec l’implémentation de notification lorsque vous devez être averti une fois qu’une valeur de propriété a changé. Cette implémentation nécessite plus de temps, car elle nécessite un appel de fonction. La macro d’entrée de mappage de répartition pour cette implémentation est DISP_PROPERTY_NOTIFY.

  • Implémentation des méthodes Get/Set

    Cette implémentation se compose d’une paire de fonctions membres dans la classe de contrôle. L’implémentation des méthodes Get/Set appelle automatiquement la fonction De membre Get lorsque l’utilisateur du contrôle demande la valeur actuelle de la propriété et la fonction De membre Set lorsque l’utilisateur du contrôle demande que la propriété soit modifiée. Utilisez cette implémentation lorsque vous devez calculer la valeur d’une propriété pendant l’exécution, valider une valeur transmise par l’utilisateur du contrôle avant de modifier la propriété réelle, ou implémenter un type de propriété en lecture ou en écriture seule. La macro d’entrée de mappage de répartition pour cette implémentation est DISP_PROPERTY_EX. La section suivante, à l’aide de l’Assistant Ajouter une propriété pour ajouter une propriété personnalisée, utilise la propriété personnalisée CircleOffset pour illustrer cette implémentation.

  • Implémentation paramétrable

    L’implémentation paramétrable est prise en charge par l’Assistant Ajout de propriété. Une propriété paramétrable (parfois appelée tableau de propriétés) peut être utilisée pour accéder à un ensemble de valeurs via une propriété unique de votre contrôle. La macro d’entrée de mappage de répartition pour cette implémentation est DISP_PROPERTY_PARAM. Pour plus d’informations sur l’implémentation de ce type, consultez Implémentation d’une propriété paramétrable dans l’article Contrôles ActiveX : Rubriques avancées.

Utilisation de l’Assistant Ajouter une propriété pour ajouter une propriété personnalisée

La procédure suivante illustre l’ajout d’une propriété personnalisée, CircleOffset, qui utilise l’implémentation des méthodes Get/Set. La propriété personnalisée CircleOffset permet à l’utilisateur du contrôle de décaler le cercle du centre du rectangle englobant du contrôle. La procédure d’ajout de propriétés personnalisées avec une implémentation autre que Get/Set Methods est très similaire.

Cette même procédure peut également être utilisée pour ajouter d’autres propriétés personnalisées souhaitées. Remplacez le nom de votre propriété personnalisée par le nom et les paramètres de la propriété CircleOffset.

Pour ajouter la propriété personnalisée CircleOffset à l’aide de l’Assistant Ajouter une propriété

  1. Chargez votre projet de contrôle.

  2. Dans l’Affichage de classes, développez le nœud Bibliothèque de votre contrôle.

  3. Cliquez sur le nœud Interface de votre contrôle (le deuxième nœud du nœud Bibliothèque) pour ouvrir le menu contextuel.

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

    L’Assistant Ajouter une propriété s’ouvre.

  5. Dans la zone Nom de la propriété, tapez CircleOffset.

  6. Pour Type d’implémentation, cliquez sur Méthodes Get/Set.

  7. Dans la zone Type de propriété, sélectionnez short.

  8. Tapez des noms uniques pour vos fonctions Get et Set, ou acceptez les noms par défaut.

  9. Cliquez sur Terminer.

Ajouter des modifications de l’Assistant Propriété pour les propriétés personnalisées

Lorsque vous ajoutez la propriété personnalisée CircleOffset, l’Assistant Ajouter une propriété apporte des modifications à l’en-tête (. H) et l’implémentation (. Fichiers CPP) de la classe de contrôle.

Les lignes suivantes sont ajoutées au . Fichier H pour déclarer deux fonctions appelées GetCircleOffset et SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

La ligne suivante est ajoutée aux contrôles de votre contrôle. Fichier IDL :

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

Cette ligne affecte à la propriété CircleOffset un numéro d’ID spécifique, extrait de la position de la méthode dans les méthodes et la liste des propriétés de l’Assistant Ajouter une propriété.

En outre, la ligne suivante est ajoutée à la carte de répartition (dans le . Fichier CPP de la classe de contrôle) pour mapper la propriété CircleOffset aux deux fonctions de gestionnaire du contrôle :

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

Enfin, les implémentations des fonctions et SetCircleOffset des GetCircleOffset fonctions sont ajoutées à la fin du contrôle. Fichier CPP. Dans la plupart des cas, vous allez modifier la fonction Get pour retourner la valeur de la propriété. La fonction Set contient généralement du code qui doit être exécuté avant ou après la modification de la propriété.

void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Notez que l’Assistant Ajouter une propriété ajoute automatiquement un appel, à SetModifiedFlag, au corps de la fonction Set. L’appel de cette fonction marque le contrôle comme modifié. Si un contrôle a été modifié, son nouvel état est enregistré lors de l’enregistrement du conteneur. Cette fonction doit être appelée chaque fois qu’une propriété, enregistrée dans le cadre de l’état persistant du contrôle, modifie la valeur.

Voir aussi

Contrôles ActiveX MFC
Contrôles ActiveX MFC : propriétés
Contrôles ActiveX MFC : méthodes
COleControl, classe