服务器:服务器项

当容器启动服务器,使用户可以编辑嵌入或链接的 OLE 项时,服务器应用程序会创建一个“服务器项”。服务器项是派生自 COleServerItem 的类的对象,它在服务器文档与容器应用程序之间提供一个接口。

COleServerItem 类定义由 OLE 调用的若干可重写的成员函数,通常用于响应容器的请求。 服务器项可以表示服务器文档的一部分或整个文档。 将 OLE 项嵌入到容器文档中时,服务器项表示整个服务器文档。 链接 OLE 项时,服务器项可以表示服务器文档的一部分或整个文档,这取决于是链接到部分文档还是整个文档。

例如,在 HIERSVR 示例中,服务器项类 CServerItem 具有一个成员,该成员是一个指向 CServerNode 类的对象的指针。 CServerNode 对象是 HIERSVR 应用程序文档(树)中的一个节点。 当 CServerNode 对象是根节点时,CServerItem 对象表示整个文档。 当 CServerNode 对象是子节点时,CServerItem 对象表示文档的一部分。 有关此交互的示例,请参见 MFC OLE 示例 HIERSVR

实现服务器项

如果使用应用程序向导生成应用程序的“起始”代码,若要在起始代码中包含服务器项,则只需从“OLE 选项”页中选择一个服务器选项即可。 如果您要将服务器项添加到现有应用程序中,请执行以下步骤:

实现服务器项

  1. COleServerItem 派生一个类。

  2. 在派生类中,重写 OnDraw 成员函数。

    框架调用 OnDraw 以将 OLE 项渲染到图元文件中。 容器应用程序可使用此图元文件渲染该项。 应用程序的视图类还有一个 OnDraw 成员函数,在服务器应用程序处于活动状态时可使用此成员函数渲染该项。

  3. 为服务器文档类实现 OnGetEmbeddedItem 的重写。 有关详细信息,请参阅服务器:实现服务器文档一文和 MFC OLE 示例 HIERSVR

  4. 实现服务器项类的 OnGetExtent 成员函数。 框架调用此函数来检索项的大小。 默认实现不执行任何操作。

服务器项体系结构的提示

实现服务器项中所述,服务器应用程序必须能够在服务器视图以及在容器应用程序使用的图元文件中渲染项。 在 Microsoft 基础类库的应用程序体系结构中,视图类的 OnDraw 成员函数会在编辑项时渲染项(请查看类库参考中的 CView::OnDraw)。 在所有其他情况下,服务器项的 OnDraw 都会将项渲染到图元文件中(请参阅 COleServerItem::OnDraw)。

你可以通过在服务器文档类中编写 Helper 函数,并在你的视图类和服务器项类中从 OnDraw 函数调用 Helper 函数来避免重复代码。 MFC OLE 示例 HIERSVR 使用此策略:CServerView::OnDrawCServerItem::OnDraw 函数都调用 CServerDoc::DrawTree 来渲染项。

因为视图和项是在不同条件下绘制的,所以视图和项都具有 OnDraw 成员函数。 视图必须考虑这些因素,如缩放、选择大小和范围、剪辑和用户界面元素(如滚动条)。 另一方面,服务器项始终绘制整个 OLE 对象。

有关详细信息,请查看类库参考中的 CView::OnDrawCOleServerItemCOleServerItem::OnDrawCOleServerDoc::OnGetEmbeddedItem

另请参阅

服务器