Образец ACTIVEDOC: реализация сервера активных документов
Обновлен: Ноябрь 2007
В образце ACTIVEDOC показано, как реализовать сервер активных документов. В образце демонстрируются следующие возможности.
Реализация интерфейсов IOleDocument и IOleDocumentView.
Выполнение слияния меню с контейнером.
Реализация панели инструментов в объекте.
Переопределение методов Load и Save интерфейса IPersistStreamInit для выполнения нестандартных операций сохранения и загрузки.
Использование класса CDialogImpl для реализации диалогового окна "О программе".
Создание подкласса для элемента управления "Поле ввода" с расширенными функциями.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск образца
Построение образца
Откройте решение ActiveDoc.sln.
В меню Построение выберите команду Построить решение.
Запуск образца в Internet Explorer
Откройте файл ActiveDoc.htm или созданный файл ActiveDoc.AAA в обозревателе Internet Explorer (чтобы открыть файл ActiveDoc.AAA, нажмите кнопку Open, когда будет предложено открыть этот файл).
Измените цвет введенного текста с помощью меню Format, которое будет добавлено в строку меню Internet Explorer, или путем нажатия цветных кнопок в панели инструментов.
Запуск образца в Microsoft Office Binder
Запустите Microsoft Office Binder и в меню Раздел выберите команду Добавить.
Выберите значок с подписью "Класс ActiveDoc" и нажмите кнопку ОК.
Будет показан объект, внедренный в Office Binder. Заметьте, что выполнено слияние меню и показывается панель инструментов ActiveDoc. Можно ввести текст, а затем с помощью меню и кнопок панели инструментов изменить его цвет.
Образцы файлов
В этот образец входят следующие главные файлы:
ActiveCtl.h
ActiveCtl.cpp — реализует класс CActiveDoc, который представляет общий объект ActiveDoc.
OleDocument.h — содержит реализацию интерфейсов IOleDocument и IOleDocumentView.
Toolbar.h — содержит класс CToolbar, который участвует в реализации панели инструментов.
Ключевые слова
В этом образце используются следующие ключевые слова:
ActiveXDocActivate; ALT_MSG_MAP; ATLASSERT; ATLTRACE; BEGIN_COM_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; BEGIN_PROPERTY_MAP; BEGIN_TOOLBAR_MAP; CAboutDlg::DoModal; CanInPlaceActivate; CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CComObjectRootEx::InternalQueryInterface; CComPtr; CHARFORMAT; CMenu; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_ID_HANDLER; COMMAND_RANGE_HANDLER; CreateMenu; CreateRTFWindow; CreateToolbar; CreateWindowEx; CToolbar; CWindow::DestroyWindow; CWindow::ModifyStyle; CWindow::SetFocus; CWindow::SetParent; CWindow::SetWindowPos; DECLARE_REGISTRY_RESOURCEID; DestroyMenu; DestroyToolbar; DisableThreadLibraryCalls; DllMain; DoesVerbUIActivate; EDITSTREAM::dwCookie; EDITSTREAM::dwError; EDITSTREAM::pfnCallback; Ellipse; END_COM_MAP; END_MSG_MAP; END_OBJECT_MAP; END_PROPERTY_MAP; END_TOOLBAR_MAP; EndDialog; ExtTextOut; FreeLibrary; GetMenuItemCount; GetMenuItemID; GetMenuState; GetMenuString; GetResourceInstance; GetStockObject; GetSubMenu; GetTextMetrics; GetWindow; GetWindowContext; GetWindowRect; HDC; hdcDraw;; IDataObjectImpl; IDispatchImpl; InitCommonControls; InlineIsEqualGUID; InPlaceDeactivate; InPlaceMenuCreate; InPlaceMenuDestroy; InsertMenu; InterfaceSupportsErrorInfo; InternalQueryInterface; IOleControlImpl; IOleDocument::GetDocMiscStatus; IOleDocumentImpl; IOleDocumentView::ApplyViewState; IOleDocumentView::SetInPlaceSite; IOleDocumentViewImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceFrame* pFrame;; IOleInPlaceFrame::InsertMenus; IOleInPlaceFrame::Release; IOleInPlaceFrame::SetMenu; IOleInPlaceObjectWindowlessImpl; IOLEInPlaceSite::GetWindowContext; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISupportErrorImpl; IViewObjectExImpl; LoadLibrary; LoadMenu; LoadString; MAKEINTRESOURCE; MergeMenus; MESSAGE_HANDLER; NOTIFY_CODE_HANDLER; OBJECT_ENTRY; OleCreateMenuDescriptor; OLEINPLACEFRAMEINFO; OnInPlaceActivate; OnUIActivate; prcBounds; RECT rcPos, rcClip;; RemoveMenu; SelectObject; SendMessage; SetActiveObject; SetBkMode; SetBorderSpace; SetControlFocus; SetFocus; SetInPlaceSite; SetMenu; SetObjectRects; SetTextColor; ShowObject; ShowWindow; UIActivate; UIDeactivate; UnmergeMenus; ZeroMemory