ACTIVEDOC 示例:实现活动文档服务器
更新:2007 年 11 月
ACTIVEDOC 示例说明如何实现活动文档服务器。此示例演示以下操作:
如何实现 IOleDocument 和 IOleDocumentView 接口。
如何通过容器执行菜单合并。
如何实现对象中的工具栏。
如何重写 IPersistStreamInit 方法 Load 和 Save 来执行自定义保存和加载。
如何使用 CDialogImpl 来实现“关于”对话框。
如何创建“多格式文本编辑控件”的子类。
安全说明: |
---|
提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 |
获取示例和安装示例的说明:
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
生成并运行示例
生成示例
打开解决方案 ActiveDoc.sln。
在“生成”菜单中,单击“生成解决方案”。
使用 Internet Explorer 运行示例
在 Internet Explorer 中打开 ActiveDoc.htm 或 ActiveDoc.AAA 生成的文件(若要打开 ActiveDoc.AAA,请在看到打开此文件的提示后单击“打开”按钮)。
使用已合并到 Internet Explorer 菜单栏的“Format”(格式)菜单,或直接单击工具栏颜色来更改键入文本的颜色。
使用 Microsoft Office 活页夹运行示例
运行 Microsoft Office 活页夹,并从“节”菜单中单击“添加”。
选择标记为“ActiveDoc 类”的图标,再单击“确定”。
应看到嵌入在 Office 活页夹中的对象。注意,菜单已合并,并且显示 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