COleServerItem与COleServerDoc的问题 请高人讲解下COleServerItem类与COleServerDoc类各自的作用,以及他们的联系,举个例子最好,小弟对这块很困惑,看了msdn仍然没有较清晰的认识,请大家不要吝啬自己的键盘,回帖救救我吧。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 doc是由无数的item组成的,就像文件夹包含文件夹和文件一样 为 了 支 持OLE 文 档 特 性,AppWizard 还 生 成 了 另 一 个 从COleServerItem 派 生 的 类, 实 际 上, 它 代 表 了 真 正 的OLE 对 象, 它 也 实 现 了IOleObject、IDataObject 接 口。 而 且,COleServerItem 与COleServerDoc 有 很 紧 密 的 联 系, 通 过COleServerItem::GetDocument 可 以 获 取 相 应 的COleServerDoc 对 象; 通 过COleServerDoc::GetEmbeddedItem 可 以 获 取 相 应 的COleServerItem 对 象。 因 为COleServerItem 对 象 代 表 的 是OLE 文 档 对 象, 所 以 我 们 可 以 把 读 写 数 据 处 理 以 及 对 象 自 身 的 操 作 放 在COleServerItem 的 虚 成 员 函 数 中 完 成, 而 把 通 用 的 文 档 操 作 以 及 对 象 的 编 辑 操 作 放 在COleServerDoc 以 及View 类 中 完 成。 ---- MFC 对ActiveX 文 档 的 支 持 绝 大 部 分 继 承 于 对OLE 文 档 的 支 持, 只 是 针 对ActiveX 文 档 的 新 特 性 重 载 和 添 加 了 一 些 方 法, 基 本 的 结 构 不 变。 下 面 列 出 相 应 的 改 进。 ---- 1 . 由 于COleServerDoc 是 针 对 任 意COM 组 件 的,ActiveX 文 档 侍 者 的 文 档 类 也 从COleServerDoc 派 生。 ---- 2 .ActiveX 文 档 对 象 在 包 容 器 程 序 中 运 行 时, 它 所 使 用 的 框 架 类CInPlaceFrame 从COleDocIPFrameWnd 派 生, 而COleDocIPFrameWnd 类 也 是COleIPFrameWnd 的 派 生 类。 在COleDocIPFrameWnd 中 根 据ActiveX 文 档 对 象 的 界 面 特 性, 重 载 了 框 架 改 变 大 小 操 作 的 特 性( 对 象 服 务 程 序 的 窗 口 完 全 覆 盖 了 包 容 器 的 框 架 窗 口), 并 把 它 自 己 的 菜 单 资 源 连 到 框 架 上。 ---- 3 . 代 表 文 档 对 象 的 基 类 为CDocObjectServerItem, 它 从COleServerItem 派 生。CDocObjectServerItem 类 重 载 了 一 些 操 作 特 性, 最 主 要 的 是 激 活 操 作( 通 过OnShow 或OnOpen 方 法 实 现)。 ---- 4 .CDocObjectServer 类 不 用 于OLE 文 档 服 务 程 序, 它 实 现 了 新 的ActiveX 文 档 接 口。 服 务 程 序 创 建 一 个CDocObjectServer 类 的 对 象, 并 把 它 与COleServerDoc 对 象 连 接 起 来, 我 们 可 以 在 派 生 文 档 类 的COleServerDoc::GetDocObjectServer 函 数 中 看 到 其 构 造 代 码。 然 后, 文 档 对 象 和 与 其 相 连 的CDocObjectServer 对 象 协 同 工 作, 共 同 完 成ActiveX 文 档 的 功 能。CDocObjectServer 类 实 现 了IOleDocument 和IOleDocumentView 接 口。 通 常 我 们 不 必 从CDocObjectServer 派 生 新 的 类。 首先感谢CathySun118详尽的回答。 我在仔细看您的回帖,借此机会麻烦再问您一个问题。在msdn的CEditView的示例程序SUPERPAD 中,我仔细学习过它的源代码,令我迷惑的是他是如何响应文件保存和文件另存为操作的呢?为何我找不到相关消息映射和消息处理代码的?请您指点下。 #ifndef __PADDOC_H__#define __PADDOC_H__class CMyOleItem;class CPadDoc : public COleServerDoc/*当被容器注册的应用服务编辑该对象时,该对象将会被其自己的服务文档加载,一个COleServerDoc object 仅包含一个COleServerItem object*/{ DECLARE_DYNCREATE(CPadDoc)public: CPadDoc(); void SetSelection(int nBeg, int nEnd);public: virtual COleServerItem* OnGetEmbeddedItem(); virtual COleServerItem* OnGetLinkedItem(LPCTSTR lpszItemName);protected: virtual void Serialize(CArchive& ar); virtual void DeleteContents(); virtual ~CPadDoc(); //{{AFX_MSG(CPadDoc) afx_msg void OnViewUpdatenow(); afx_msg void OnCancelInplace(); //}}AFX_MSG DECLARE_MESSAGE_MAP() friend class CMyOleItem;};#endif 找伙伴学习VC++ 如何在Dialog应用程序中调用OnIdle函数!?!??!? 请教替换游戏中画图API的问题 char * 和char[]的区别救命啊 编译时的小问题,各位帮忙,先谢过! 面试问题 111222来一下。。 函数问题 这里有没有女程序员?我想成立个女程序员联盟 VC编写的控件不能被vb引用,送分200!!! 发布一个个人开发的图像软件,希望大家支持 坐标系标注问题...
#define __PADDOC_H__class CMyOleItem;class CPadDoc : public COleServerDoc
/*当被容器注册的应用服务编辑该对象时,
该对象将会被其自己的服务文档加载,一个
COleServerDoc object 仅包含
一个COleServerItem object*/
{
DECLARE_DYNCREATE(CPadDoc)public:
CPadDoc();
void SetSelection(int nBeg, int nEnd);public:
virtual COleServerItem* OnGetEmbeddedItem();
virtual COleServerItem* OnGetLinkedItem(LPCTSTR lpszItemName);protected:
virtual void Serialize(CArchive& ar);
virtual void DeleteContents();
virtual ~CPadDoc(); //{{AFX_MSG(CPadDoc)
afx_msg void OnViewUpdatenow();
afx_msg void OnCancelInplace();
//}}AFX_MSG
DECLARE_MESSAGE_MAP() friend class CMyOleItem;
};#endif