Contrôles ActiveX MFC
Un contrôle ActiveX est un composant logiciel réutilisable qui repose sur le modèle COM (Component Object Model), prend en charge une large gamme de fonctionnalités OLE et peut être personnalisé pour répondre à de nombreux besoins logiciels.
Important
ActiveX est une technologie héritée qui ne doit pas être utilisée pour le nouveau développement. Pour plus d’informations, consultez Contrôles ActiveX.
Les contrôles ActiveX sont conçus pour être utilisés à la fois dans les conteneurs de contrôle ActiveX ordinaires et sur Internet, dans les pages World Wide Web. Vous pouvez créer des contrôles ActiveX avec MFC, décrit ici ou avec la bibliothèque de modèles active (ATL).
Un contrôle ActiveX peut se dessiner lui-même dans sa propre fenêtre, répondre aux événements (tels que les clics de souris) et être géré via une interface qui inclut des propriétés et des méthodes similaires à celles des objets Automation.
Ces contrôles peuvent être développés pour de nombreuses utilisations, telles que l’accès à la base de données, la surveillance des données ou le graphique. Outre leur portabilité, les contrôles ActiveX prennent en charge les fonctionnalités précédemment non disponibles pour les contrôles ActiveX, telles que la compatibilité avec les conteneurs OLE existants et la possibilité d’intégrer leurs menus aux menus de conteneur OLE. En outre, un contrôle ActiveX prend entièrement en charge Automation, ce qui permet au contrôle d’exposer les propriétés en lecture-écriture et un ensemble de méthodes qui peuvent être appelées par l’utilisateur du contrôle.
Vous pouvez créer des contrôles Et des contrôles ActiveX sans fenêtre qui ne créent qu’une fenêtre lorsqu’elles deviennent actives. Les contrôles sans fenêtre accélèrent l’affichage de votre application et permettent d’avoir des contrôles transparents et nonrectangulaires. Vous pouvez également charger les propriétés de contrôle ActiveX de manière asynchrone.
Un contrôle ActiveX est implémenté en tant que serveur in-process (généralement un petit objet) qui peut être utilisé dans n’importe quel conteneur OLE. Notez que la fonctionnalité complète d’un contrôle ActiveX est disponible uniquement lorsqu’elle est utilisée dans un conteneur OLE conçu pour être conscient des contrôles ActiveX. Consultez Les contrôles ActiveX de port vers d’autres applications pour obtenir la liste des conteneurs qui prennent en charge les contrôles ActiveX. Ce type de conteneur, appelé ci-après « conteneur de contrôle », peut utiliser un contrôle ActiveX à l’aide des propriétés et méthodes du contrôle et reçoit des notifications du contrôle ActiveX sous la forme d’événements. La figure suivante illustre cette interaction.
Interaction entre un conteneur de contrôle ActiveX et un contrôle ActiveX fenêtré
Pour obtenir des informations récentes sur l’optimisation de vos contrôles ActiveX, consultez Contrôles ActiveX MFC : Optimisation.
Pour créer un contrôle ActiveX MFC, consultez Créer un projet de contrôle ActiveX.
Pour en savoir plus, consultez :
Composants de base d’un contrôle ActiveX
Un contrôle ActiveX utilise plusieurs éléments programmatiques pour interagir efficacement avec un conteneur de contrôle et avec l’utilisateur. Il s’agit de COleControl, d’un ensemble de fonctions de déclenchement d’événements et d’une carte de répartition.
Chaque objet de contrôle ActiveX que vous développez hérite d’un ensemble puissant de fonctionnalités de sa classe de base MFC. COleControl
Ces fonctionnalités incluent l’activation sur place et la logique Automation. COleControl
peut fournir à l’objet de contrôle les mêmes fonctionnalités qu’un objet de fenêtre MFC, ainsi que la possibilité de déclencher des événements. COleControl
peut également fournir des contrôles sans fenêtre, qui s’appuient sur leur conteneur pour obtenir de l’aide sur certaines des fonctionnalités qu’une fenêtre fournit (capture de la souris, focus clavier, défilement), mais offrent un affichage beaucoup plus rapide.
Étant donné que la classe de contrôle dérive de , elle hérite de COleControl
la possibilité d’envoyer, ou de « déclencher » des messages, appelés événements, au conteneur de contrôle quand certaines conditions sont remplies. Ces événements sont utilisés pour notifier le conteneur de contrôle quand quelque chose d’important se produit dans le contrôle. Vous pouvez envoyer des informations supplémentaires sur un événement au conteneur de contrôle en attachant des paramètres à l’événement. Pour plus d’informations sur les événements de contrôle ActiveX, consultez l’article MFC Contrôles ActiveX : Événements.
L’élément final est une carte de répartition, utilisée pour exposer un ensemble de fonctions (appelées méthodes) et d’attributs (appelés propriétés) à l’utilisateur de contrôle. Les propriétés permettent au conteneur de contrôle ou à l’utilisateur de contrôle de manipuler le contrôle de différentes façons. L’utilisateur peut modifier l’apparence du contrôle, modifier certaines valeurs du contrôle ou effectuer des demandes du contrôle, telles que l’accès à une partie spécifique des données que le contrôle conserve. Cette interface est déterminée par le développeur de contrôles et est définie à l’aide de la vue de classe. Pour plus d’informations sur les méthodes et propriétés de contrôle ActiveX, consultez les articles MFC Contrôles ActiveX : Méthodes et propriétés.
Interaction entre les contrôles avec les conteneurs de contrôles Windows et ActiveX
Lorsqu’un contrôle est utilisé dans un conteneur de contrôle, il utilise deux mécanismes pour communiquer : il expose des propriétés et des méthodes, et déclenche des événements. La figure suivante montre comment ces deux mécanismes sont implémentés.
Communication entre un conteneur de contrôle ActiveX et un contrôle ActiveX
La figure précédente illustre également la façon dont d’autres interfaces OLE (en plus de l’automatisation et des événements) sont gérées par des contrôles.
Toutes les communications d’un contrôle avec le conteneur sont effectuées par COleControl
. Pour gérer certaines des requêtes du conteneur, COleControl
appelle les fonctions membres implémentées dans la classe de contrôle. Toutes les méthodes et certaines propriétés sont gérées de cette façon. La classe de votre contrôle peut également initier une communication avec le conteneur en appelant les fonctions membres de COleControl
. Les événements sont déclenchés de cette façon.
États actifs et inactifs d’un contrôle ActiveX
Un contrôle a deux états de base : actif et inactif. Traditionnellement, ces états se distinguent par le fait que le contrôle avait une fenêtre. Un contrôle actif avait une fenêtre ; un contrôle inactif n’a pas été effectué. Avec l’introduction de l’activation sans fenêtre, cette distinction n’est plus universelle, mais s’applique toujours à de nombreux contrôles.
Lorsqu’un contrôle sans fenêtre est actif, il appelle la capture de la souris, le focus clavier, le défilement et d’autres services de fenêtre à partir de son conteneur. Vous pouvez également fournir une interaction de la souris aux contrôles inactifs, ainsi que créer des contrôles qui attendent que l’activation soit activée pour créer une fenêtre.
Lorsqu’un contrôle avec une fenêtre devient actif, il est en mesure d’interagir entièrement avec le conteneur de contrôle, l’utilisateur et Windows. La figure ci-dessous illustre les chemins de communication entre le contrôle ActiveX, le conteneur de contrôle et le système d’exploitation.
Traitement des messages Windows dans un contrôle ActiveX fenêtré (lorsqu’il est actif)
Sérialisation
La possibilité de sérialiser des données, parfois appelée persistance, permet au contrôle d’écrire la valeur de ses propriétés dans un stockage persistant. Les contrôles peuvent ensuite être recréés en lisant l’état de l’objet à partir du stockage.
Notez qu’un contrôle n’est pas responsable de l’obtention de l’accès au support de stockage. Au lieu de cela, le conteneur du contrôle est chargé de fournir au contrôle un support de stockage à utiliser aux moments appropriés. Pour plus d’informations sur la sérialisation, consultez l’article MFC ActiveX Controls : Serializing. Pour plus d’informations sur l’optimisation de la sérialisation, consultez Optimisation de la persistance et de l’initialisation dans les contrôles ActiveX : Optimisation.
Installation des classes et outils de contrôle ActiveX
Lorsque vous installez Visual C++, les classes de contrôle ActiveX MFC et la vente au détail et déboguent les DLL de contrôle ActiveX au moment de l’exécution sont automatiquement installées si les contrôles ActiveX sont sélectionnés dans le programme d’installation (ils sont sélectionnés par défaut).
Par défaut, les classes et outils de contrôle ActiveX sont installés dans les sous-répertoires suivants sous \Program Files\Microsoft Visual Studio .NET :
\Common7\Tools
Contient les fichiers de conteneur de test (TstCon32.exe, ainsi que ses fichiers d’aide).
\Vc7\atlmfc\include
Contient les fichiers include nécessaires pour développer des contrôles ActiveX avec MFC
\Vc7\atlmfc\src\mfc
Contient le code source pour des classes de contrôle ActiveX spécifiques dans MFC
\Vc7\atlmfc\lib
Contient les bibliothèques requises pour développer des contrôles ActiveX avec MFC
Il existe également des exemples pour les contrôles ActiveX MFC. Pour plus d’informations sur ces exemples, consultez Exemples de contrôles : Contrôles ActiveX basés sur MFC