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
Ouvrez le fichier solution atltangram.sln.
Dans le menu Générer, cliquez sur Générer la solution.
Dans le menu Déboguer, cliquez sur Exécuter sans débogage.
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 :
Dans le menu Projet, cliquez sur Propriétés.
Sélectionnez la solution Atltangram dans l'Explorateur de solutions.
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.
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. |