COleServerItem 类

提供 OLE 项的服务器接口。

语法

class COleServerItem : public CDocItem

成员

受保护构造函数

名称 描述
COleServerItem::COleServerItem 构造 COleServerItem 对象。

公共方法

名称 描述
COleServerItem::AddOtherClipboardData 将呈现和转换格式放在 COleDataSource 对象中。
COleServerItem::CopyToClipboard 将项复制到剪贴板。
COleServerItem::DoDragDrop 执行拖放操作。
COleServerItem::GetClipboardData 获取数据传输(拖放或剪贴板)中使用的数据源。
COleServerItem::GetDocument 返回包含项的服务器文档。
COleServerItem::GetEmbedSourceData 获取 OLE 项的 CF_EMBEDSOURCE 数据。
COleServerItem::GetItemName 返回项的名称。 仅用于链接项。
COleServerItem::GetLinkSourceData 获取 OLE 项的 CF_LINKSOURCE 数据。
COleServerItem::GetObjectDescriptorData 获取 OLE 项的 CF_OBJECTDESCRIPTOR 数据。
COleServerItem::IsConnected 指示项当前是否已附加到活动容器。
COleServerItem::IsLinkedItem 指示项是否表示链接的 OLE 项。
COleServerItem::NotifyChanged 使用自动链接更新来更新所有容器。
COleServerItem::OnDoVerb 调用以执行谓词。
COleServerItem::OnDraw 当容器请求绘制项时调用;需要实现。
COleServerItem::OnDrawEx 针对专用项绘制调用。
COleServerItem::OnGetClipboardData 由框架调用,以获取要复制到剪贴板的数据。
COleServerItem::OnGetExtent 由框架调用,以检索 OLE 项的大小。
COleServerItem::OnInitFromData 由框架调用,以使用指定的数据传输对象的内容初始化 OLE 项。
COleServerItem::OnQueryUpdateItems 调用以确定是否有任何链接项需要更新。
COleServerItem::OnRenderData 检索数据作为延迟呈现的一部分。
COleServerItem::OnRenderFileData 将数据检索到 CFile 对象中,作为延迟呈现的一部分。
COleServerItem::OnRenderGlobalData 将数据检索到 HGLOBAL 中,作为延迟呈现的一部分。
COleServerItem::OnSetColorScheme 调用以设置项的配色方案。
COleServerItem::OnSetData 调用以设置项的数据。
COleServerItem::OnSetExtent 由框架调用,以设置 OLE 项的大小。
COleServerItem::OnUpdate 当项所属的文档的某个部分发生更改时调用。
COleServerItem::OnUpdateItems 调用以更新服务器文档中所有项的呈现缓存。
COleServerItem::SetItemName 设置项的名称。 仅用于链接项。

受保护方法

名称 描述
COleServerItem::GetDataSource 获取用于存储转换格式的对象。
COleServerItem::OnHide 由框架调用以隐藏 OLE 项。
COleServerItem::OnOpen 由框架调用,以在 OLE 项自身的顶级窗口中显示该项。
COleServerItem::OnShow 当容器请求显示项时调用。

公共数据成员

“属性” 描述
COleServerItem::m_sizeExtent 告知服务器有多少 OLE 项可见。

备注

链接项可以代表服务器文档的一部分或整个内容。 嵌入项始终代表整个服务器文档。

COleServerItem 类定义多个由 OLE 系统动态链接库 (DLL) 调用的可重写成员函数,通常用于响应来自容器应用的请求。 这些成员函数使容器应用能够以各种方式间接操作项,例如通过显示项、执行其谓词或以各种格式检索其数据。

若要使用 COleServerItem,请从它派生一个类并实现 OnDrawSerialize 成员函数。 OnDraw 函数提供项的元文件表示形式,使该项能够在容器应用程序打开复合文档时显示。 CObjectSerialize 函数提供项的本机表示形式,使嵌入项可以在服务器和容器应用程序之间传输。 OnGetExtent 将项的自然大小提供给容器,使容器能够调整项的大小。

有关服务器和相关主题的详细信息,请参阅服务器:实现服务器一文,以及容器:高级功能一文中的“创建容器/服务器应用程序”。

继承层次结构

CObject

CCmdTarget

CDocItem

COleServerItem

要求

标头:afxole.h

COleServerItem::AddOtherClipboardData

调用此函数可将 OLE 项的表示形式和转换格式放入指定的 COleDataSource 对象中。

void AddOtherClipboardData(COleDataSource* pDataSource);

参数

pDataSource
指向要将数据放入到的 COleDataSource 对象的指针。

备注

必须实现 OnDraw 成员函数才能为项提供呈现格式(元文件图片)。 若要支持其他转换格式,请使用 GetDataSource 返回的 COleDataSource 对象注册这些格式,并重写 OnRenderData 成员函数以便以你要支持的格式提供数据。

COleServerItem::COleServerItem

构造一个 COleServerItem 对象并将其添加到服务器文档的文档项集合中。

COleServerItem(
    COleServerDoc* pServerDoc,
    BOOL bAutoDelete);

参数

pServerDoc
指向包含新项的文档的指针。

bAutoDelete
用于指示在释放对象的链接时是否可以删除该对象的标志。 如果 COleServerItem 对象是必须删除的文档数据的不可或缺的组成部分,请将此参数设置为 FALSE。 如果对象是用于标识文档数据中可由框架删除的范围的辅助结构,请将此参数设置为 TRUE。

COleServerItem::CopyToClipboard

调用此函数可将 OLE 项复制到剪贴板。

void CopyToClipboard(BOOL bIncludeLink = FALSE);

参数

bIncludeLink
如果链接数据应复制到剪贴板,请将此参数设置为 TRUE。 如果服务器应用程序不支持链接,请将此参数设置为 FALSE。

备注

该函数使用 OnGetClipboardData 成员函数创建一个 COleDataSource 对象,其中包含采用受支持格式的 OLE 项数据。 然后该函数使用 COleDataSource::SetClipboard 函数将 COleDataSource 对象放到剪贴板。 COleDataSource 对象包含项的本机数据及其以 CF_METAFILEPICT 格式的表示形式,以及采用你选择支持的任何转换格式的数据。 必须实现 SerializeOnDraw 才能正常运行此成员函数。

COleServerItem::DoDragDrop

调用 DoDragDrop 成员函数以执行拖放操作。

DROPEFFECT DoDragDrop(
    LPCRECT lpRectItem,
    CPoint ptOffset,
    BOOL bIncludeLink = FALSE,
    DWORD dwEffects = DROPEFFECT_COPY | DROPEFFECT_MOVE,
    LPCRECT lpRectStartDrag = NULL);

参数

lpRectItem
项在屏幕上的矩形,以像素为单位,相对于工作区。

ptOffset
lpItemRect 中的偏移量,即鼠标在拖动时的位置

bIncludeLink
如果链接数据应复制到剪贴板,请将此参数设置为 TRUE。 如果应用程序不支持链接,请将此其设置为 FALSE。

dwEffects
确定拖动源在拖动操作中允许的效果(复制、移动和链接的组合)。

lpRectStartDrag
指向定义拖动实际开始位置的矩形的指针。 有关更多信息,请参见下面的“备注”部分。

返回值

DROPEFFECT 枚举中的值。 如果值为 DROPEFFECT_MOVE,则应删除原始数据。

备注

拖放操作不会立即启动。 它等待鼠标光标离开 lpRectStartDrag 指定的矩形,或者直到经过了指定的毫秒数。 如果 lpRectStartDrag 为 NULL,则使用默认矩形,以便在鼠标光标移动一个像素时开始拖动

延迟时间由注册表项设置指定。 可以通过调用 CWinApp::WriteProfileStringCWinApp::WriteProfileInt 来更改延迟时间。 如果未指定延迟时间,则使用默认值 200 毫秒。 拖动延迟时间存储如下:

  • Windows NT 拖动延迟时间存储在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\IniFileMapping\win.ini\Windows\DragDelay 中。

  • Windows 3.x 拖动延迟时间存储在 [Windows} 部分下的 WIN.INI 文件中。

  • Windows 95/98 拖动延迟时间存储在 WIN.INI 的缓存版本中。

有关如何将拖动延迟信息存储在注册表或 .INI 文件中的详细信息,请参阅 Windows SDK 中的 WriteProfileString

COleServerItem::GetClipboardData

如果调用了 CopyToClipboard,请调用此函数在指定的 COleDataSource 对象中填充要复制到剪贴板的所有数据(如果调用了 DoDragDrop,也会传输相同的数据)。

void GetClipboardData(
    COleDataSource* pDataSource,
    BOOL bIncludeLink = FALSE,
    LPPOINT lpOffset = NULL,
    LPSIZE lpSize = NULL);

参数

pDataSource
指向 COleDataSource 对象的指针,该对象将接收采用所有受支持格式的 OLE 项数据。

bIncludeLink
如果链接数据应复制到剪贴板,则为 TRUE。 如果服务器应用程序不支持链接,则为 FALSE。

lpOffset
鼠标光标与对象原点的偏移量(以像素为单位)。

lpSize
对象大小(以像素为单位)。

注解

此函数调用 GetEmbedSourceData 成员函数来获取 OLE 项的本机数据,并调用 AddOtherClipboardData 成员函数来获取呈现格式和任何受支持的转换格式。 如果 bIncludeLink 为 TRUE,该函数还会调用 GetLinkSourceData 来获取项的链接数据

如果你想要在 CopyToClipboard 提供的格式之前或之后将格式放入 COleDataSource 对象,请重写此函数。

COleServerItem::GetDataSource

调用此函数可获取用于存储服务器应用程序支持的转换格式的 COleDataSource 对象。

COleDataSource* GetDataSource();

返回值

指向用于存储转换格式的 COleDataSource 对象的指针。

备注

如果你希望服务器应用程序在数据传输操作期间以多种格式提供数据,请使用此函数返回的 COleDataSource 对象注册这些格式。 例如,如果你想要为剪贴板或拖放操作提供 OLE 项的 CF_TEXT 表示形式,可以使用此函数返回的 COleDataSource 对象注册格式,然后重写 OnRenderXxxData 成员函数以提供数据。

COleServerItem::GetDocument

调用此函数可获取指向包含项的文档的指针。

COleServerDoc* GetDocument() const;

返回值

指向包含该项的文档的指针;如果项不是文档的一部分,则为 NULL。

备注

这样,就可以访问作为参数传递给 COleServerItem 构造函数的服务器文档。

COleServerItem::GetEmbedSourceData

调用此函数可获取 OLE 项的 CF_EMBEDSOURCE 数据。

void GetEmbedSourceData(LPSTGMEDIUM lpStgMedium);

参数

lpStgMedium
指向要接收 OLE 项的 CF_EMBEDSOURCE 数据的 STGMEDIUM 结构的指针。

备注

此格式包括项的本机数据。 必须实现 Serialize 成员函数才能正常运行此函数。

然后可以使用 COleDataSource::CacheData 将结果添加到数据源。 此函数由 COleServerItem::OnGetClipboardData 自动调用。

有关详细信息,请参阅 Windows SDK 中的 STGMEDIUM

COleServerItem::GetItemName

调用此函数可获取项的名称。

const CString& GetItemName() const;

返回值

项的名称。

备注

通常只针对链接项调用此函数。

COleServerItem::GetLinkSourceData

调用此函数可获取 OLE 项的 CF_LINKSOURCE 数据。

BOOL GetLinkSourceData(LPSTGMEDIUM lpStgMedium);

参数

lpStgMedium
指向要接收 OLE 项的 CF_LINKSOURCE 数据的 STGMEDIUM 结构的指针。

返回值

如果成功,则不为 0;否则为 0。

注解

此格式包括描述 OLE 项类型的 CLSID,以及查找包含 OLE 项的文档所需的信息。

然后可以使用 COleDataSource::CacheData 将结果添加到数据源。 此函数由 OnGetClipboardData 自动调用。

有关详细信息,请参阅 Windows SDK 中的 STGMEDIUM

COleServerItem::GetObjectDescriptorData

调用此函数可获取 OLE 项的 CF_OBJECTDESCRIPTOR 数据。

void GetObjectDescriptorData(
    LPPOINT lpOffset,
    LPSIZE lpSize,
    LPSTGMEDIUM lpStgMedium);

参数

lpOffset
鼠标单击位置与 OLE 项的左上角的偏移量。 可以为 NULL。

lpSize
OLE 项的大小。 可以为 NULL。

lpStgMedium
指向要接收 OLE 项的 CF_OBJECTDESCRIPTOR 数据的 STGMEDIUM 结构的指针。

备注

该信息将复制到 lpStgMedium 指向的 STGMEDIUM 结构中。 此格式包括“选择性粘贴”对话框所需的信息。

有关详细信息,请参阅 Windows SDK 中的 STGMEDIUM

COleServerItem::IsConnected

调用此函数可查看是否连接了 OLE 项。

BOOL IsConnected() const;

返回值

如果项已连接,则返回非零值;否则返回 0。

注解

如果一个或多个容器具有对项的引用,则认为 OLE 项已连接。 如果项的引用计数大于 0 或者它是一个嵌入项,则该项已连接。

COleServerItem::IsLinkedItem

调用此函数可查看 OLE 项是否为链接项。

BOOL IsLinkedItem() const;

返回值

如果项是链接项,则返回非零值;否则返回 0。

备注

如果项有效并且未在文档的嵌入项列表中返回,则该项已链接。 链接项不一定已连接到容器。

通常会对链接项和嵌入项使用同一个类。 IsLinkedItem 允许将链接项的行为设置为与嵌入项不同,不过在很多情况下代码是通用的。

COleServerItem::m_sizeExtent

此成员告知服务器有多少对象在容器文档中可见。

CSize m_sizeExtent;

备注

OnSetExtent 的默认实现设置此成员。

COleServerItem::NotifyChanged

在链接项已更改后调用此函数。

void NotifyChanged(DVASPECT nDrawAspect = DVASPECT_CONTENT);

参数

nDrawAspect
DVASPECT 枚举中的值,指示 OLE 项的哪个方面已更改。 此参数可能具有以下任何值:

  • DVASPECT_CONTENT 项以这样一种方式表示,它可以在容器中显示为嵌入对象。

  • DVASPECT_THUMBNAIL 项以“缩略图”表示形式呈现,以便可以在浏览工具中显示。

  • DVASPECT_ICON 项由图标表示。

  • DVASPECT_DOCPRINT 项表示为使用“文件”菜单中的 Print 命令打印的项。

注解

如果容器项已通过自动链接链接到文档,则会更新该项以反映更改。 在使用 Microsoft 基础类库编写的容器应用程序中,会在响应中调用 COleClientItem::OnChange

COleServerItem::OnDoVerb

由框架调用以执行指定的谓词。

virtual void OnDoVerb(LONG iVerb);

参数

iVerb
指定要执行的谓词。 可以为以下任一项:

含义 符号
0 主谓词 OLEIVERB_PRIMARY
1 辅助谓词 (无)
- 1 显示编辑项 OLEIVERB_SHOW
2- 在单独的窗口中编辑项 OLEIVERB_OPEN
- 3 隐藏项 OLEIVERB_HIDE

-1 值通常是另一个谓词的别名。 如果不支持打开编辑,则 -2 的效果与 -1 相同。 有关其他值,请参阅 Windows SDK 中的 IOleObject::DoVerb

备注

如果容器应用程序是使用 Microsoft 基础类库编写的,则在调用相应 COleClientItem 对象的 COleClientItem::Activate 成员函数时会调用此函数。 如果指定了主要谓词或 OLEIVERB_SHOW,则默认实现将调用 OnShow 成员函数;如果指定了辅助谓词或 OLEIVERB_OPEN,则调用 OnOpen;如果指定了 OLEIVERB_HIDE,则调用 OnHide。 如果 iVerb 不是上面列出的谓词之一,则默认实现将调用 OnShow

如果主要谓词不显示该项,请重写此函数。 例如,如果该项是录音并且其主要谓词是 Play,则无需显示服务器应用程序即可播放该项。

有关详细信息,请参阅 Windows SDK 中的 IOleObject::DoVerb

COleServerItem::OnDraw

由框架调用,以将 OLE 项呈现到元文件中。

virtual BOOL OnDraw(
    CDC* pDC,
    CSize& rSize) = 0;

参数

pDC
指向要在其上绘制项的 CDC 对象的指针。 显示上下文自动连接到属性显示上下文,因此你可以调用属性函数,不过这样做会使元文件特定于设备。

rSize
绘制元文件时采用的大小,以 HIMETRIC 为单位。

返回值

如果已成功绘制项,则返回非零值;否则返回 0。

备注

OLE 项的元文件表示形式用于在容器应用程序中显示该项。 如果容器应用程序是使用 Microsoft 基础类库编写的,则元文件将由相应 COleClientItem 对象的 Draw 成员函数使用。 没有默认实现。 必须重写此函数才能将项绘制到指定的设备上下文中。

COleServerItem::OnDrawEx

由框架调用以执行所有绘制。

virtual BOOL OnDrawEx(
    CDC* pDC,
    DVASPECT nDrawAspect,
    CSize& rSize);

参数

pDC
指向要在其上绘制项的 CDC 对象的指针。 DC 自动连接到属性 DC,因此你可以调用属性函数,不过这样做会使元文件特定于设备。

nDrawAspect
DVASPECT 枚举中的值。 此参数可能具有以下任何值:

  • DVASPECT_CONTENT 项以这样一种方式表示,它可以在容器中显示为嵌入对象。

  • DVASPECT_THUMBNAIL 项以“缩略图”表示形式呈现,以便可以在浏览工具中显示。

  • DVASPECT_ICON 项由图标表示。

  • DVASPECT_DOCPRINT 项表示为使用“文件”菜单中的 Print 命令打印的项。

rSize
项的大小,以 HIMETRIC 为单位。

返回值

如果已成功绘制项,则返回非零值;否则返回 0。

备注

当 DVASPECT 等于 DVASPECT_CONTENT 时,默认实现将调用 OnDraw;否则默认实现会失败。

重写此函数以提供除 DVASPECT_CONTENT 以外的方面的呈现数据,例如 DVASPECT_ICON 或 DVASPECT_THUMBNAIL。

COleServerItem::OnGetClipboardData

由框架调用,以获取一个 COleDataSource 对象,该对象包含将通过调用 CopyToClipboard 成员函数放置在剪贴板上的所有数据。

virtual COleDataSource* OnGetClipboardData(
    BOOL bIncludeLink,
    LPPOINT lpOffset,
    LPSIZE lpSize);

参数

bIncludeLink
如果链接数据应复制到剪贴板,请将此参数设置为 TRUE。 如果服务器应用程序不支持链接,请将此参数设置为 FALSE。

lpOffset
鼠标光标与对象原点的偏移量(以像素为单位)。

lpSize
对象大小(以像素为单位)。

返回值

指向包含剪贴板数据的 COleDataSource 对象的指针。

备注

此函数的默认实现调用 GetClipboardData

COleServerItem::OnGetExtent

由框架调用,以检索 OLE 项的大小(以 HIMETRIC 为单位)。

virtual BOOL OnGetExtent(
    DVASPECT nDrawAspect,
    CSize& rSize);

参数

nDrawAspect
指定要检索其边界的 OLE 项的方面。 此参数可能具有以下任何值:

  • DVASPECT_CONTENT 项以这样一种方式表示,它可以在容器中显示为嵌入对象。

  • DVASPECT_THUMBNAIL 项以“缩略图”表示形式呈现,以便可以在浏览工具中显示。

  • DVASPECT_ICON 项由图标表示。

  • DVASPECT_DOCPRINT 项表示为使用“文件”菜单中的 Print 命令打印的项。

rSize
对要接收 OLE 项大小的 CSize 对象的引用。

返回值

如果成功,则不为 0;否则为 0。

注解

如果容器应用程序是使用 Microsoft 基础类库编写的,则在调用相应 COleClientItem 对象的 GetExtent 成员函数时会调用此函数。 默认实现不执行任何操作。 必须由你自己实现它。 如果你想要在处理 OLE 项大小请求时执行特殊处理,请重写此函数。

COleServerItem::OnHide

由框架调用以隐藏 OLE 项。

virtual void OnHide();

注解

默认调用 COleServerDoc::OnShowDocument( FALSE )。 该函数还通知容器已隐藏 OLE 项。 如果你想要在隐藏 OLE 项时执行特殊处理,请重写此函数。

COleServerItem::OnInitFromData

由框架调用,以使用 pDataObject 的内容初始化 OLE 项

virtual BOOL OnInitFromData(
    COleDataObject* pDataObject,
    BOOL bCreation);

参数

pDataObject
指向 OLE 数据对象的指针,该对象包含用于初始化 OLE 项的各种格式的数据。

bCreation
如果调用该函数来初始化容器应用程序新建的 OLE 项,则为 TRUE。 如果调用该函数来替换已存在的 OLE 项的内容,则为 FALSE。

返回值

如果成功,则不为 0;否则为 0。

备注

如果 bCreation 为 TRUE,则在容器根据当前选择实现“插入新对象”时会调用此函数。 创建新的 OLE 项时使用所选的数据。 例如,在电子表格程序中选择单元格范围,然后使用“插入新对象”基于所选范围内的值创建图表时。 默认实现不执行任何操作。 重写此函数以从 pDataObject 提供的格式中选择可接受的格式,并根据提供的数据初始化 OLE 项。 这是一个高级可重写函数。

有关详细信息,请参阅 Windows SDK 中的 IOleObject::InitFromData

COleServerItem::OnOpen

由框架调用,以在服务器应用程序的单独实例中显示 OLE 项,而不是就地显示。

virtual void OnOpen();

备注

默认实现将激活第一个框架窗口,其中显示了包含 OLE 项的文档;如果应用程序是微型服务器,则默认实现将显示主窗口。 该函数还通知容器已打开 OLE 项。

如果你想要在打开 OLE 项时执行特殊处理,请重写此函数。 对于在链接已打开时你要将选择设置为该链接的链接项,这种做法特别常见。

有关详细信息,请参阅 Windows SDK 中的 IOleClientSite::OnShowWindow

COleServerItem::OnQueryUpdateItems

由框架调用,以确定当前服务器文档中的任何链接项是否已过期。

virtual BOOL OnQueryUpdateItems();

返回值

如果文档中包含需要更新的项,则返回非零值;如果所有项都是最新的,则返回 0。

备注

如果项的源文档已更改,但链接项尚未更新以反映文档中的更改,则表示该项已过时。

COleServerItem::OnRenderData

由框架调用,以检索采用指定格式的数据。

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

参数

lpFormatEtc
指向 FORMATETC 结构,该结构指定请求的信息的格式。

lpStgMedium
指向要在其中返回数据的 STGMEDIUM 结构。

返回值

如果成功,则不为 0;否则为 0。

注解

指定的格式是先前使用用于延迟呈现的 DelayRenderDataDelayRenderFileData 成员函数放入 COleDataSource 对象中的一种格式。 如果提供的存储媒体是文件或内存,则此函数的默认实现将分别调用 OnRenderFileDataOnRenderGlobalData。 如果未提供上述任一格式,则默认实现将返回 0 且不执行任何操作。

如果 lpStgMedium->tymed 为 TYMED_NULL,则应按照 lpFormatEtc->tymed 的指定分配和填充 STGMEDIUM。 如果不是 TYMED_NULL,则应就地使用数据填充 STGMEDIUM。

这是一个高级可重写函数。 替代此函数以便以请求的格式和介质提供数据。 根据数据,可能需要改为替代此函数的其他版本之一。 如果数据很小且大小固定,请替代 OnRenderGlobalData。 如果数据在文件中或大小可变,请重写 OnRenderFileData

有关详细信息,请参阅 Windows SDK 中的 IDataObject::GetDataSTGMEDIUMFORMATETCTYMED

COleServerItem::OnRenderFileData

当存储介质为文件时由框架调用,以检索采用指定格式的数据。

virtual BOOL OnRenderFileData(
    LPFORMATETC lpFormatEtc,
    CFile* pFile);

参数

lpFormatEtc
指向 FORMATETC 结构,该结构指定请求的信息的格式。

pFile
指向要在其中呈现数据的 CFile 对象。

返回值

如果成功,则不为 0;否则为 0。

备注

指定的格式是先前使用用于延迟呈现的 DelayRenderData 成员函数放入 COleDataSource 对象中的一种格式。 此函数的默认实现只会返回 FALSE。

这是一个高级可重写函数。 替代此函数以便以请求的格式和介质提供数据。 根据数据,可能需要改为替代此函数的其他版本之一。 如果你想要处理多个存储媒体,请重写 OnRenderData。 如果数据在文件中或大小可变,请重写 OnRenderFileData

有关详细信息,请参阅 Windows SDK 中的 IDataObject::GetDataFORMATETC

COleServerItem::OnRenderGlobalData

当指定的存储媒体为全局内存时由框架调用,以检索采用指定格式的数据。

virtual BOOL OnRenderGlobalData(
    LPFORMATETC lpFormatEtc,
    HGLOBAL* phGlobal);

参数

lpFormatEtc
指向 FORMATETC 结构,该结构指定请求的信息的格式。

phGlobal
指向要在其中返回数据的全局内存的句柄。 如果未分配内存,则此参数可为 NULL。

返回值

如果成功,则不为 0;否则为 0。

注解

指定的格式是先前使用用于延迟呈现的 DelayRenderData 成员函数放入 COleDataSource 对象中的一种格式。 此函数的默认实现只会返回 FALSE。

如果 phGlobal 为 NULL,则应分配并在 phGlobal 中返回一个新的 HGLOBAL。 否则,应使用数据填充 phGlobal 指定的 HGLOBAL。 放在 HGLOBAL 中的数据量不得超过内存块的当前大小。 此外,不能将块重新分配为更大的大小。

这是一个高级可重写函数。 替代此函数以便以请求的格式和介质提供数据。 根据数据,可能需要改为替代此函数的其他版本之一。 如果你想要处理多个存储媒体,请重写 OnRenderData。 如果数据在文件中或大小可变,请重写 OnRenderFileData

有关详细信息,请参阅 Windows SDK 中的 IDataObject::GetDataFORMATETC

COleServerItem::OnSetColorScheme

由框架调用,以指定编辑 OLE 项时要使用的调色板。

virtual BOOL OnSetColorScheme(const LOGPALETTE* lpLogPalette);

参数

lpLogPalette
指向 Windows LOGPALETTE 结构的指针。

返回值

如果使用调色板,则返回非零值;否则返回 0。

备注

如果容器应用程序是使用 Microsoft 基础类库编写的,则在调用相应 COleClientItem 对象的 IOleObject::SetColorScheme 函数时会调用此函数。 默认实现返回 FALSE。 如果你想要使用建议的调色板,请重写此函数。 服务器应用程序不需要使用建议的调色板。

有关详细信息,请参阅 Windows SDK 中的 IOleObject::SetColorScheme

COleServerItem::OnSetData

由框架调用,以将 OLE 项的数据替换为指定的数据。

virtual BOOL OnSetData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium,
    BOOL bRelease);

参数

lpFormatEtc
指向用于指定数据格式的 FORMATETC 结构的指针。

lpStgMedium
指向数据所在的 STGMEDIUM 结构的指针。

bRelease
指示完成函数调用后存储媒体由谁拥有。 调用方决定谁负责释放代表存储媒体分配的资源。 调用方通过设置 bRelease 来做出此决定。 如果 bRelease 不为零,则服务器项将取得所有权,并在使用完媒体后释放媒体。 如果 bRelease 为 0,则调用方将保留所有权,服务器项只能在调用持续时间内使用存储媒体

返回值

如果成功,则不为 0;否则为 0。

备注

服务器项在成功获取数据之前不会取得数据的所有权。 也就是说,如果它返回 0,则不会取得所有权。 如果数据源取得所有权,它将通过调用 ReleaseStgMedium 函数来释放存储媒体。

默认实现不执行任何操作。 重写此函数可将 OLE 项的数据替换为指定的数据。 这是一个高级可重写函数。

有关详细信息,请参阅 Windows SDK 中的 STGMEDIUMFORMATETCReleaseStgMedium

COleServerItem::OnSetExtent

由框架调用,以告知 OLE 项它在容器文档中有多少可用空间。

virtual BOOL OnSetExtent(
    DVASPECT nDrawAspect,
    const CSize& size);

参数

nDrawAspect
指定要指定其边界的 OLE 项的方面。 此参数可能具有以下任何值:

  • DVASPECT_CONTENT 项以这样一种方式表示,它可以在容器中显示为嵌入对象。

  • DVASPECT_THUMBNAIL 项以“缩略图”表示形式呈现,以便可以在浏览工具中显示。

  • DVASPECT_ICON 项由图标表示。

  • DVASPECT_DOCPRINT 项表示为使用“文件”菜单中的 Print 命令打印的项。

size
一个 CSize 结构,指定 OLE 项的新大小。

返回值

如果成功,则不为 0;否则为 0。

备注

如果容器应用程序是使用 Microsoft 基础类库编写的,则在调用相应 COleClientItem 对象的 SetExtent 成员函数时会调用此函数。 如果 nDrawAspect 为 DVASPECT_CONTENT,则默认实现会将 m_sizeExtent 成员设置为指定的大小;否则返回 0。 更改项的大小时,请重写此函数以执行特殊处理。

COleServerItem::OnShow

由框架调用,以指示服务器应用程序就地显示 OLE 项。

virtual void OnShow();

备注

当容器应用程序的用户创建项或执行需要显示项的谓词(例如 Edit)时,通常会调用此函数。 默认实现会尝试就地激活。 如果此操作失败,该函数将调用 OnOpen 成员函数以在单独的窗口中显示 OLE 项。

如果你想要在显示 OLE 项时执行特殊处理,请重写此函数。

COleServerItem::OnUpdate

修改项后由框架调用。

virtual void OnUpdate(
    COleServerItem* pSender,
    LPARAM lHint,
    CObject* pHint,
    DVASPECT nDrawAspect);

参数

pSender
指向修改了文档的项的指针。 可以为 NULL。

lHint
包含有关修改的信息。

pHint
一个指针,指向存储有关修改的信息的对象。

nDrawAspect
DVASPECT 枚举中的值。 此参数可以采用下列任一值:

  • DVASPECT_CONTENT 项以这样一种方式表示,它可以在容器中显示为嵌入对象。

  • DVASPECT_THUMBNAIL 项以“缩略图”表示形式呈现,以便可以在浏览工具中显示。

  • DVASPECT_ICON 项由图标表示。

  • DVASPECT_DOCPRINT 项表示为使用“文件”菜单中的 Print 命令打印的项。

备注

无论提示或发送方是什么,默认实现都会调用 NotifyChanged

COleServerItem::OnUpdateItems

由框架调用,以更新服务器文档中的所有项。

virtual void OnUpdateItems();

备注

默认实现针对文档中的所有 COleClientItem 对象调用 UpdateLink

COleServerItem::SetItemName

创建链接项时调用此函数可设置该项的名称。

void SetItemName(LPCTSTR lpszItemName);

参数

lpszItemName
指向项的新名称的指针。

备注

该名称在文档中必须是唯一的。 当调用服务器应用程序来编辑链接项时,应用程序将使用此名称来查找该项。 不需要为嵌入项调用此函数。

另请参阅

MFC 示例 HIERSVR
CDocItem 类
层次结构图
COleClientItem 类
COleServerDoc 类
COleTemplateServer 类