Contrôles ActiveX MFC : implémentation avancée de propriété
Cet article explique les rubriques relatives à l'implémentation des propriétés avancées dans un contrôle ActiveX :
Propriétés en lecture seule et en écriture seule
Renvoi des codes d'erreur d'une propriété
Propriétés en lecture seule et en écriture seule
Type de données c offre une méthode rapide et facile pour implémenter les propriétés en lecture seule ou en écriture seule pour le contrôle.
Pour implémenter une propriété en lecture seule ou en écriture seule
Chargez votre projet.
Sous Class View, développez l'arborescence de votre librairie.
Cliquez avec le bouton droit sur le nœud de votre interface (le deuxième nœud de l'arborescence de la librairie) pour ouvrir le menu contextuel.
Dans le menu contextuel, cliquez sur Ajouter puis sur Ajouter une propriété.
Cela ouvre l'Assistant Ajout de Propriétés.
Dans la zone Nom de la propriété, tapez un nom pour votre nouvelle propriété.
Dans Type d'implémentation, cliquez sur Méthodes Get/Set.
Dans la zone de Type de propriété, sélectionnez le type approprié pour la propriété.
Si vous souhaitez une propriété en lecture seule, désactivez le nom de fonction définie. Si vous souhaitez une propriété en lecture seule, désactivez le nom de fonction définie.
Cliquez sur Terminer.
Dans ce cas, type de données c insère la fonction SetNotSupported ou GetNotSupported dans l'entrée de dispatch à la place d'un jeu ou d'une fonction système standard.
Si vous souhaitez modifier une propriété existante comme étant en lecture seule ou en lecture seule, vous pouvez modifier la table de dispatch manuellement et supprimer tout ou la fonction Get inutile de la classe de contrôle.
Si vous souhaitez une propriété comme condition en lecture seule ou en lecture seule (par exemple, lorsque votre contrôle s'exécute dans un mode spécifique), vous pouvez fournir tout ou la fonction système, comme la normale, et appelez la fonction d'SetNotSupported ou d'GetNotSupported le cas échéant. Par exemple :
void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (m_bReadOnlyMode) // some control-specific state
{
SetNotSupported();
}
else
{
m_iPropVal = newVal; // set property as normal
SetModifiedFlag();
}
}
Cet exemple de code appelle SetNotSupported si le membre de données de m_bReadOnlyMode est TRUE. Si FALSE, la propriété est définie à la nouvelle valeur.
Renvoi des codes d'erreur d'une propriété
Pour indiquer qu'une erreur s'est produite lors de la tentative d'obtenir ou définir une propriété, utilisez la fonction d'COleControl::ThrowError, qui prend SCODE (code d'état) en tant que paramètre. Vous pouvez utiliser SCODE prédéfini ou définir un de vos propres. Pour obtenir la liste des SCODEprédéfini s et instruction pour définir SCODEpersonnalisé s, consultez l'Gestion des erreurs dans le contrôle ActiveX dans les contrôles ActiveX d'article : Rubriques avancées.
Les fonctions d'assistance existent pour la plupart des SCODEprédéfini par courantes s, tel qu' COleControl::SetNotSupported, COleControl::GetNotSupported, et COleControl::SetNotPermitted.
Notes
ThrowError est destiné à être utilisé uniquement comme méthode de retourner une erreur de la fonction de l'obtention ou de l'ensemble d'une propriété ou d'une méthode automation.Ce sont les seuls temps que le gestionnaire des exceptions approprié est présent dans la pile.
Pour plus d'informations sur les exceptions de rapports dans d'autres zones de code, consultez COleControl::FireError et la section Gestion des erreurs dans le contrôle ActiveX dans les contrôles ActiveX d'article : Rubriques avancées.