Поделиться через


Образец атрибутов ATLTangram: демонстрация управления большими проектами, использующими ATL, MFC и COM

Обновлен: Ноябрь 2007

Образец ATLTangram представляет портированную версию примера Tangram из последней главы книги Дейла Роджерсона (Dale Rogerson) Основы COM (http://mspress.microsoft.com). Выражаем благодарность Дейлу за проделанную работу и разрешение использовать код в образце ATL. Этот образец предназначен для преобразования COM-приложения прежних версий в приложение, в инфраструктуре которого используется ATL.

Образец ATLTangram является крупным проектом, состоящим из решения ATLTangram, которое является главным контроллером для шести подпроектов: MFCTangram, ATLModel, ATLGdiWorld, ATLGLWorld, ATLModelExe и ATLTangramCanvas. В образце показано несколько функций интегрированной среды разработки и несколько основных понятий модели COM. В образце также демонстрируется использование MFC в качестве клиентов COM-серверов ATL.

16k4aex6.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению.

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

Построение и запуск этого образца

  1. Откройте файл решения atltangram.sln.

  2. В меню Построение выберите команду Построить решение.

  3. В меню Отладка выберите команду Запуск без отладки.

  4. Откроется диалоговое окно. Выберите один из вариантов. Запустится программа Tangram.

Управление большим проектом

Решение устанавливает взаимозависимости в интегрированной среде разработки. Эти взаимозависимости работают со структурой каталогов по умолчанию для образца и задаются относительно пути.

Иерархия зависимостей имеет примерно следующий вид:

MFCTangram
   ATLGLWorld
      ATLGdiWorld
         ATLTangramCanvas
            ATLModel
   ATLModelExe
      ATLModel
      ATLModel

Для образца уже установлены все параметры проекта. Чтобы просмотреть взаимозависимости проекта, выполните следующие действия.

  1. В меню Проект выберите пункт Свойства.

  2. Выберите решение Atltangram в обозревателе решений.

  3. В диалоговом окне Страницы свойств разверните папку Общие свойства и выберите пункт Исходные файлы отладки. Проверьте значение поля Пути к исходным файлам.

  4. Нажмите кнопку Зависимости проектов и изучите имена зависимых проектов.

Проекты ATLModel и ATLModelExe показывают, как настроить COM-сервер, чтобы его можно было построить как внутрипроцессный сервер или как локальный сервер с использованием одинакового набора файлов и двух файлов проекта. Использование двух файлов проекта делает возможным наличие зависимостей в модулях DLL и EXE.

Функции COM и ATL

Этот образец является COM-системой, состоящей из нескольких COM-серверов и приложения MFC, которое использует эти серверы. В образце представлена межмодульная связь посредством механизма точек подключения и показаны локальные и внутрипроцессные серверы.

Другие демонстрируемые функции

  • Серверы ATL используют для коллекций библиотеку стандартных шаблонов.

  • Драйвер MFC использует классы шаблонов MFC.

  • Драйвер MFC, который служит примером приложения, не использующего архитектуру документов и представлений, использует класс, производный от CFrameWnd, в качестве окна вывода для рисования компонентов Tangram.

Атрибуты

В этом образце используются следующие атрибуты:

  • 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

Классы и ключевые слова

В образце используются следующие классы ATL:

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

В образце используются следующие классы MFC:

CFrameWnd, CTypedPtrList<>, CDialog, CWinApp и дополнительные классы поддержки

В этом образце используются следующие ключевые слова:

_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

16k4aex6.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи.

См. также

Другие ресурсы

Образцы атрибутов ATL