Partager via


ATLTangram, exemple d'attributs : illustre la gestion de grands projets utilisant ATL, MFC et COM

Mise à jour : novembre 2007

ATLTangram est un port de l'exemple Tangram qui figure dans le dernier chapitre de l'ouvrage de Dale Rogerson Inside COM (https://www.microsoft.com/france/mspress). Un grand merci à Dale pour tous ses efforts et pour nous avoir autorisé à utiliser le code dans un exemple ATL. Cet exemple vous aidera à convertir une application COM héritée (legacy) en une application qui utilise ATL pour son infrastructure.

ATLTangram est un gros projet constitué par la solution ATLTangram qui est le contrôleur maître de six sous-projets :MFCTangram, ATLModel, ATLGdiWorld, ATLGLWorld, ATLModelExe et ATLTangramCanvas. Cet exemple illustre plusieurs fonctionnalités de l'environnement de développement intégré (IDE) et plusieurs concepts COM. Il illustre également l'utilisation de MFC comme client de serveurs ATL COM.

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 atltangram.sln.

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

  3. Dans le menu Déboguer, cliquez sur Exécuter sans débogage.

  4. Une boîte de dialogue apparaît : sélectionnez une option. Le programme Tangram commence.

Gestion d'un gros projet

La solution a établi les interdépendances dans l'environnement IDE. Ces interdépendances fonctionnent avec la structure de répertoires par défaut de l'exemple et sont relatives au chemin d'accès.

La hiérarchie de dépendance a l'aspect général suivant :

MFCTangram
   ATLGLWorld
      ATLGdiWorld
         ATLTangramCanvas
            ATLModel
   ATLModelExe
      ATLModel
      ATLModel

Tous les paramètres du projet sont déjà établis pour l'exemple. Pour étudier les interdépendances du projet, procédez comme suit :

  1. Dans le menu Projet, cliquez sur Propriétés.

  2. Sélectionnez la solution Atltangram dans l'Explorateur de solutions.

  3. Dans la boîte de dialogue Pages de propriétés, développez le dossier Propriétés communes, puis sélectionnez la page Fichiers sources pour le débogage. Examinez la zone Rechercher ces chemins d'accès pour les fichiers sources.

  4. Dans le menu Dépendances du projet, examinez les noms des projets dépendants.

Les projets ATLModel et ATLModelExe montrent comment configurer un serveur COM de manière à pouvoir en faire un serveur in-process ou un serveur local en utilisant le même ensemble de fichiers et deux fichiers projet. L'utilisation de deux fichiers projet permet aux dépendances d'exister à la fois dans le fichier DLL et dans le fichier EXE.

Fonctionnalités COM/ATL

Cet exemple est un système COM composé de plusieurs serveurs COM et d'une application MFC utilisant ces serveurs. L'exemple illustre la communication intermodule par l'intermédiaire du mécanisme de point de connexion et illustre la notion de serveur local et in-process.

Autres fonctionnalités illustrées

  • Les serveurs ATL utilisent la bibliothèque de modèles standard pour les collections.

  • Le pilote MFC utilise des classes de modèles MFC.

  • Le pilote MFC, exemple d'une application sans architecture Document/Vue, utilise une classe dérivée de CFrameWnd comme fenêtre de sortie pour dessiner les éléments de Tangram.

Attributs

Cet exemple utilise les attributs suivants :

  • ATLTANGRAM   export, helpstring, object, pointer_default, uuid

  • ATLTANGRAM/atlgdiworld   coclass, com_interface_entry, default, dll, event_receiver, helpstring, iid_is, implements_category, in, module, name, object, out, pointer_default, progid, registration_script, size_is, unique, uuid, version, vi_progid

  • ATLTANGRAM/atlglworld   coclass, com_interface_entry, default, dll, event_receiver, helpstring, implements_category, in, module, name, object, out, pointer_default, progid, registration_script, uuid, vi_progid

  • ATLTANGRAM/atlmodel   coclass, default, dll, event_source, exe, helpstring, in, module, name, object, out, pointer_default, progid, size_is, uuid

  • ATLTANGRAM/atltangramcanvas   coclass, default, dll, helpstring, in, module, name, object, out, pointer_default, progid, registration_script, uuid, vi_progid

Classes et mots clés

Cet exemple utilise les classes ATL suivantes :

CComObjectRootEx, CComCoClass, CComControl, IDispatchImpl, IProvideClassInfo2Impl, IPersistStreamInitImpl, IPersistStorageImpl, IPersistPropertyBagImpl, IPerPropertyBrowsingImpl, IQuickActivateImpl, IObjectSafetyImpl, IOleControlImpl, IOleObjectImpl, IOleInPlaceActiveObjectImpl, IViewObjectExImpl, IOleInPlaceObjectWindowlessImpl, IDataObjectImpl, ISupportErrorInfo, ISpecifyPropertyPagesImpl, IConnectionPointContainerImpl, IPropertyNotifySinkCP, CDialogImpl

L'exemple utilise les classes MFC suivantes :

CFrameWnd, CTypedPtrList<>, CDialog, CWinApp et d'autres classes de support

Cet exemple utilise les mots clés suivants :

_ASSERTE ; AddRef ; AddUpdateRect ; Advise ; assert ; ASSERT ; ATLTRACE ; auxSolidSphere ; BEGIN_COM_MAP ; BEGIN_CONNECTION_POINT_MAP ; BEGIN_MESSAGE_MAP ; BEGIN_OBJECT_MAP ; BitBlt ; CATEGORYINFO  ; CComCoClass ; CComModule::GetClassObject ; CComModule::GetLockCount ; CComModule::Init ; CComModule::RegisterServer ; CComModule::Term ; CComModule::UnregisterServer ; CComObjectRootEx ; CExeModule::Init ; CExeModule::RegisterClassObjects ; CExeModule::RegisterServer ; CExeModule::RevokeClassObjects ; CExeModule::UnregisterServer ; CExeModule::UpdateRegistryFromResource ; CFrameWnd::AssertValid ; CFrameWnd::Dump ; CFrameWnd::PreCreateWindow ; ChoosePixelFormat ; CModelList ; CoCreateInstance ; CoInitializeEx ; COM_INTERFACE_ENTRY ; COM_INTERFACE_ENTRY_AGGREGATE ; COM_INTERFACE_ENTRY_IMPL ; CONNECTION_POINT_ENTRY ; CopyRect ; CoTaskMemFree ; CProxyIATLTangramModelEvent ; CreateCompatibleDC ; CreatePalette ; CWnd::CreateEx ; DECLARE_GET_CONTROLLING_UNKNOWN ; DECLARE_MESSAGE_MAP ; DECLARE_ONLY_AGGREGATABLE ; DECLARE_REGISTRY_RESOURCEID ; DeleteObject ; DescribePixelFormat ; DisableThreadLibraryCalls ; DispatchMessage ; DoButtonDown ; DoModal ; END_COM_MAP ; END_CONNECTION_POINT_MAP ; END_MESSAGE_MAP ; END_OBJECT_MAP ; EqualRect ; ErrorMessage ; GdiFlush ; GetBoundingRect ; GetClientRect ; GetCommandLine ; GetControllingUnknown ; GetDC ; GetMessage ; GetModuleFileName ; GetObject ; GetPalette ; GetPaletteEntries ; GetPixelFormat ; GetRotation ; GetVertices ; glBegin ; glClearColor ; GLdouble CoCreateInstance ; glEnable ; glEnd ; glFlush ; glGetIntegerv ; glInitNames ; glLightfv ; glLightModelfv ; glLoadIdentity ; glMatrixMode ; glNormal3d ; glPolygonMode ; glPopMatrix ; glPopName ; glPushMatrix ; glPushName ; GLRender ; glRenderMode ; GLResize ; glRotated ; glSelectBuffer ; GLSetup ; glTranslated ; glTranslatef ; gluPerspective ; gluPickMatrix ; gluUnProject ; glVertex2d ; glVertex3d ; glViewport ; HPALETTE ; ICatInformation::EnumClassesOfCategories ; ICatRegister::QueryInterface ; ICatRegister::RegisterCategories ; ICatRegister::RegisterClassImplCategories ; ICatRegister::UnRegisterCategories ; ICatRegister::UnRegisterClassImplCategories ; IConnectionPointContainer::FindConnectionPoint ; IConnectionPointContainer::Release ; IConnectionPointContainerImpl ; InitInstance ; InvalidateRect ; IsCurrent ; IsValidAddress ; IUnknown::Release ; LoadIcon ; LoadStandardCursor ; LocalFree ; MakeCurrent ; OBJECT_ENTRY ; ON_COMMAND ; ON_WM_DESTROY  ; OnCancel ; OnDestroy ; OnInitDialog ; OnOK ; OnQueryNewPalette ; OutputDebugString ; OutputGlError ; Polygon ; PreCreateWindow ; PtInRegion ; QueryInterface ; RealizePalette ; Release ; ReleaseConnectionPoint ; ReleaseDC ; Rotate ; SelectObject ; SelectPalette ; SetPixelFormat ; SetRectEmpty ; specifyMaterial ; StringFromCLSID ; SubkeyExists ; va_end ; wcscpy_s ; wglCreateContext ; wglGetCurrentContext ; wglMakeCurrent

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