当容器启动服务器以便用户可以编辑嵌入的或链接的 OLE 项时,服务器应用程序会创建一个“服务器项”。服务器项是派生自 COleServerItem
的类的对象,它提供服务器文档和容器应用程序之间的接口。
该 COleServerItem
类定义由 OLE 调用的多个可重写成员函数,通常响应来自容器的请求。 服务器项可以表示服务器文档或整个文档的一部分。 当容器文档中嵌入 OLE 项时,服务器项表示整个服务器文档。 链接 OLE 项时,服务器项可以表示服务器文档或整个文档的一部分,具体取决于链接是指向部件还是整个文档。
例如,在 HIERSVR 示例中,服务器项类 CServerItem
具有指向类 CServerNode
对象的指针的成员。 该 CServerNode
对象是 HIERSVR 应用程序文档中的节点,它是一个树。
CServerNode
当对象是根节点时,该CServerItem
对象表示整个文档。
CServerNode
当对象是子节点时,该CServerItem
对象表示文档的一部分。 有关此交互的示例,请参阅 MFC OLE 示例 HIERSVR 。
实现服务器项
如果使用应用程序向导为应用程序生成“初学者”代码,则只需在初学者代码中包含服务器项即可从“OLE 选项”页中选择其中一个服务器选项。 如果要将服务器项添加到现有应用程序,请执行以下步骤:
实现服务器项
从
COleServerItem
. 派生类在派生类中,重写
OnDraw
成员函数。框架调用
OnDraw
将 OLE 项呈现为图元文件。 容器应用程序使用此图元文件来呈现项。 应用程序的视图类还具有成员OnDraw
函数,该函数用于在服务器应用程序处于活动状态时呈现项。为服务器文档类实现重写
OnGetEmbeddedItem
。 有关详细信息,请参阅 “服务器:实现服务器文档 ”和 MFC OLE 示例 HIERSVR 一文。实现服务器项类
OnGetExtent
的成员函数。 框架调用此函数以检索项的大小。 默认实现不执行任何操作。
Server-Item 体系结构提示
如 “实现服务器项”中所述,服务器应用程序必须能够在服务器视图和容器应用程序使用的图元文件中呈现项。 在 Microsoft Foundation 类库的应用程序体系结构中,视图类OnDraw
的成员函数在编辑时呈现该项(请参阅类库引用中的 CView::OnDraw)。 服务器项 OnDraw
将项呈现为所有其他情况下的图元文件(请参阅 COleServerItem::OnDraw)。
可以通过在服务器文档类中编写帮助程序函数并从视图和服务器项类中的 OnDraw
函数调用它们来避免代码重复。 MFC OLE 示例 HIERSVR 使用此策略:函数 CServerView::OnDraw
和 CServerItem::OnDraw
两个调用 CServerDoc::DrawTree
来呈现项。
视图和项都具有 OnDraw
成员函数,因为它们在不同的条件下绘制。 视图必须考虑到缩放、选择大小和范围、剪辑和用户界面元素(如滚动条)等因素。 另一方面,服务器项始终绘制整个 OLE 对象。
有关详细信息,请参阅类库参考中的 CView::OnDraw、COleServerItem、COleServerItem::OnDraw 和 COleServerDoc::OnGetEmbeddedItem。