Partager via


SUBEDIT, exemple d'attributs : surclasse un contrôle Windows standard

Mise à jour : novembre 2007

L'exemple d'attribut SUBEDIT illustre la création d'un contrôle ATL qui surclasse le contrôle d'édition Windows standard.

L'exemple SUBEDIT est la version sans attributs de cet exemple.

Note de sécurité :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page Visual Studio 2008 Samples.

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont stockés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont disponibles en ligne.

Génération et exécution de l'exemple

Pour générer et exécuter cet exemple

  1. Ouvrez le fichier solution SubEdit.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Une fois l'exemple généré, ouvrez AtlEdit.htm dans votre navigateur Web et testez le contrôle.

Vous pouvez tester le contrôle dans ActiveX Control Test Container en ouvrant la classe ATLEdit. Pour plus d'informations sur l'accès à l'outil Test Container et son utilisation pour tester un contrôle, consultez Test des propriétés et des événements à l'aide de Test Container.

Surclassement d'un contrôle Windows

ATL permet de créer un contrôle qui surclasse un contrôle Windows standard. Vous pouvez ainsi créer une classe de fenêtre basée sur une classe existante mais qui utilise une autre procédure de fenêtre. Créez ensuite une fenêtre basée sur cette nouvelle classe de fenêtre. Lorsque vous surclassez un contrôle, les messages sont traités par une table des messages ATL avant d'être envoyés à la procédure de fenêtre d'origine du contrôle. Vous pouvez ainsi modifier le comportement par défaut de contrôles Windows standard.

Lorsque vous utilisez l'Assistant Contrôle ATL pour créer un contrôle ActiveX, vous pouvez choisir d'ajouter un contrôle basé sur une classe de fenêtre standard. Dans ce cas, l'Assistant ajoute une variable membre de type CContainedWindow à la classe de votre contrôle ActiveX. CContainedWindow::Create crée ensuite une fenêtre qui surclasse la classe de fenêtre que vous avez spécifiée. Cette fenêtre utilise CContainedWindow::WindowProc pour acheminer ses messages via une table des messages. Si un message nécessite un traitement supplémentaire, il est envoyé à la procédure de fenêtre d'origine de la classe de fenêtre.

Examen de l'exemple de code (AtlEdit.h)

Le constructeur de la classe CAtlEdit affecte à la variable membre m_bWindowOnly la valeur TRUE. Cela garantit que le contrôle ne s'activera jamais en tant que contrôle sans fenêtre.

La variable membre de type CContainedWindow, m_EditCtrl, est initialisée par le constructeur CAtlEdit. Le constructeur CContainedWindow prend trois paramètres : le nom de la classe de fenêtre devant acquérir une surclasse (dans ce cas, "EDIT"), un pointeur vers la classe CAtlEdit qui contient la table des messages et l'identificateur de la table des messages qui traitera les messages de m_EditCtrl. Par défaut, m_EditCtrl utilise une table des messages secondaire, déclarée avec la macro ALT_MSG_MAP.

La table des messages par défaut déclare les noms des fonctions gestionnaires pour les messages WM_CREATE et WM_CTLCOLOREDIT envoyés au contrôle CAtlEdit. Le gestionnaire OnCreate appelle CContainedWindow::Create pour créer la fenêtre de m_EditCtrl. Le gestionnaire OnCtlColorEdit spécifie une nouvelle couleur d'arrière-plan et de texte pour m_EditCtrl.

La table des messages secondaire déclare une fonction gestionnaire pour les messages WM_CHAR envoyés à m_EditCtrl. Ce gestionnaire n'accepte ni symboles, ni nombres, mais seulement des caractères ; il passe ensuite le message WM_CHAR à la procédure de fenêtre d'origine définie par la classe Windows Edit.

Attributs

Cet exemple utilise les attributs suivants :

coclass, com_interface_entry, default, dual, emitidl, helpstring, implements_category, module, object, pointer_default, progid, registration_script, threading, uuid, version, vi_progid

Mots clés

Cet exemple utilise les mots clés suivants :

CComCoClass ; CComControl ; CComModule::GetClassObject ; CComModule::GetLockCount ; CComModule::Init ; CComModule::RegisterServer ; CComModule::Term ; CComModule::UnregisterServer ; CComObjectRoot ; CContainedWindow::DefWindowProc ; DisableThreadLibraryCalls ; GetStockObject ; GetWindowRect ; IDataObjectImpl ; IDispatchImpl ; IOleControlImpl ; IOleInPlaceActiveObjectImpl ; IOleInPlaceObjectWindowlessImpl ; IOleInPlaceObjectWindowlessImpl::SetObjectRects ; IOleObjectImpl ; IPersistStorageImpl ; IPersistStreamInitImpl ; IProvideClassInfo2Impl ; IQuickActivateImpl ; ISpecifyPropertyPagesImpl ; IViewObjectExImpl ; SetBkColor ; SetTextColor ; SetWindowPos

Remarque :

Certains exemples, tels que celui-ci, n'ont pas été modifiés pour refléter les changements apportés aux Assistants, aux bibliothèques et au compilateur Visual C++, mais ils illustrent bien l'exécution de la tâche souhaitée.

Voir aussi

Autres ressources

Exemples d'attributs ATL