COleClientItem 类
定义 OLE 项的容器接口。
语法
class COleClientItem : public CDocItem
成员
公共构造函数
名称 | 描述 |
---|---|
COleClientItem::COleClientItem | 构造 COleClientItem 对象。 |
公共方法
受保护方法
名称 | 描述 |
---|---|
COleClientItem::CanActivate | 由框架调用以确定是否允许就地激活。 |
COleClientItem::OnChangeItemPosition | 当项的位置发生更改时由框架调用。 |
COleClientItem::OnDeactivateAndUndo | 由框架调用以在激活后撤消。 |
COleClientItem::OnDiscardUndoState | 由框架调用以放弃项的撤消状态信息。 |
COleClientItem::OnGetClipRect | 由框架调用以获取项的剪裁矩形坐标。 |
COleClientItem::OnGetItemPosition | 由框架调用以获取项相对于视图的项位置。 |
COleClientItem::OnGetWindowContext | 项就地激活时由框架调用。 |
COleClientItem::OnScrollBy | 由框架调用,将项滚动到视图中。 |
COleClientItem::OnShowItem | 由框架调用以显示 OLE 项。 |
备注
OLE 项表示由服务器应用程序创建和维护的数据,该数据可以“无缝”合并到文档中,以便向用户显示为单个文档。 结果是由 OLE 项和包含的文档组成的“复合文档”。
OLE 项可以嵌入或链接。 如果嵌入,则数据将作为复合文档的一部分存储。 如果链接,则其数据存储为服务器应用程序创建的单独文件的一部分,并且只有指向该文件的链接存储在复合文档中。 所有 OLE 项都包含指定应调用以编辑它们的服务器应用程序的信息。
COleClientItem
定义多个可重写函数,这些函数在响应来自服务器应用程序的请求时调用;这些可重写项通常充当通知。 这样,服务器应用程序就可以将用户在编辑 OLE 项时所做的更改通知容器,或检索编辑期间所需的信息。
COleClientItem
可与 COleDocument、COleLinkingDoc 或 COleServerDoc 类一起使用。 若要使用 COleClientItem
,请从中派生类并实现 OnChange 成员函数,该函数定义容器如何响应对项所做的更改。 若要支持就地激活,请重写 OnGetItemPosition 成员函数。 此函数提供有关 OLE 项的显示位置的信息。
有关使用容器接口的详细信息,请参阅文章“容器:实现容器”和“激活”。
注意
Windows SDK 将嵌入项和链接项称为“对象”,并将项类型称为“类”。此引用使用术语“item”来区分 OLE 实体与相应的 C++ 对象,使用术语“type”来区分 OLE 类别与 C++ 类。
继承层次结构
COleClientItem
要求
标头:afxole.h
COleClientItem::Activate
调用此函数以执行指定的谓词而不是 DoVerb,以便在引发异常时执行自己的处理。
void Activate(
LONG nVerb,
CView* pView,
LPMSG lpMsg = NULL);
参数
nVerb
指定要执行的谓词。 该参数可以是下列值之一:
值 | 含义 | 符号 |
---|---|---|
- 0 | 主谓词 | OLEIVERB_PRIMARY |
- 1 | 辅助谓词 | (无) |
- 1 | 显示编辑项 | OLEIVERB_SHOW |
2- | 在单独的窗口中编辑项 | OLEIVERB_OPEN |
- 3 | 隐藏项 | OLEIVERB_HIDE |
-1 值通常是另一个谓词的别名。 如果不支持打开编辑,则 -2 的效果与 -1 相同。 有关其他值,请参阅 Windows SDK 中的 IOleObject::DoVerb。
pView
指向包含 OLE 项的容器视图窗口的指针;服务器应用程序使用此指针进行就地激活。 如果容器不支持就地激活,则此参数应为 NULL。
lpMsg
指向导致项被激活的消息的指针。
备注
如果使用 Microsoft 基础类库编写服务器应用程序,此函数将导致执行相应 COleServerItem
对象的 OnDoVerb 成员函数。
如果主谓词为 Edit,并在 nVerb 参数中指定零,则启动服务器应用程序以允许编辑 OLE 项。 如果容器应用程序支持就地激活,则可以就地进行编辑。 如果容器不支持就地激活(或者如果指定 Open 谓词),则会在单独的窗口中启动服务器,并且可以在那里进行编辑。 通常,当容器应用程序用户双击 OLE 项时,nVerb 参数中主谓词的值决定了用户可以执行的操作。 但是,如果服务器仅支持一个操作,则无论 nVerb 参数中指定了哪个值,它都执行该操作。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::DoVerb。
COleClientItem::ActivateAs
使用 OLE 的对象转换设施激活项,就像它是 clsidNew 指定的类型的项一样。
virtual BOOL ActivateAs(
LPCTSTR lpszUserType,
REFCLSID clsidOld,
REFCLSID clsidNew);
参数
lpszUserType
指向表示目标用户类型(例如“Word 文档”)的字符串的指针。
clsidOld
对项的当前类 ID 的引用。 类 ID 应表示实际对象的类型(例如存储),除非它是一个链接。 在这种情况下,它应该是链接所指向的项的 CLSID。 COleConvertDialog 会自动为项提供正确的类 ID。
clsidNew
对目标类 ID 的引用。
返回值
如果成功,则不为 0;否则为 0。
备注
这由 COleConvertDialog::DoConvert 自动调用。 它通常不直接调用。
COleClientItem::AttachDataObject
调用此函数来初始化 COleDataObject,以访问 OLE 项中的数据。
void AttachDataObject(COleDataObject& rDataObject) const;
参数
rDataObject
对将初始化的 COleDataObject
对象进行引用,以允许访问 OLE 项中的数据。
COleClientItem::CanActivate
当用户请求就地激活 OLE 项时由框架调用;此函数的返回值确定是否允许就地激活。
virtual BOOL CanActivate();
返回值
如果允许就地激活,则为非零;否则为 0。
备注
如果容器具有有效的窗口,则默认实现允许就地激活。 重写此函数以实现用于接受或拒绝激活请求的特殊逻辑。 例如,如果 OLE 项太小或当前不可见,则可以拒绝激活请求。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceSite::CanInPlaceActivate。
COleClientItem::CanCreateFromData
检查容器应用程序是否可以从给定 COleDataObject
对象创建嵌入对象。
static BOOL PASCAL CanCreateFromData(const COleDataObject* pDataObject);
参数
pDataObject
指向要从中创建 OLE 项的 COleDataObject 对象的指针。
返回值
如果容器可以从 COleDataObject
对象创建嵌入对象,则为非零;否则为 0。
注解
COleDataObject
类在数据传输中用于从剪贴板、通过拖放或从嵌入 OLE 项检索各种格式的数据。
容器可以使用此函数来决定启用或禁用其“Edit Paste”和“Edit Paste Special”命令。
有关详细信息,请参阅文章“数据对象和数据源 (OLE)”。
COleClientItem::CanCreateLinkFromData
检查容器应用程序是否可以从给定 COleDataObject
对象创建链接对象。
static BOOL PASCAL CanCreateLinkFromData(const COleDataObject* pDataObject);
参数
pDataObject
指向要从中创建 OLE 项的 COleDataObject 对象的指针。
返回值
如果容器可以从 COleDataObject
对象创建链接对象,则为非零。
注解
COleDataObject
类在数据传输中用于从剪贴板、通过拖放或从嵌入 OLE 项检索各种格式的数据。
容器可以使用此函数来决定启用或禁用其“Edit Paste Special”和“Edit Paste Link”命令。
有关详细信息,请参阅文章“数据对象和数据源 (OLE)”。
COleClientItem::CanPaste
调用此函数以查看是否可以从剪贴板粘贴嵌入的 OLE 项。
static BOOL PASCAL CanPaste();
返回值
如果可以从剪贴板粘贴嵌入的 OLE 项,则为非零;否则为 0。
备注
有关详细信息,请参阅 Windows SDK 中的 OleGetClipboard 和 OleQueryCreateFromData。
COleClientItem::CanPasteLink
调用此函数以查看是否可以从剪贴板粘贴链接的 OLE 项。
static BOOL PASCAL CanPasteLink();
返回值
如果可以从剪贴板粘贴链接的 OLE 项,则为非零;否则为 0。
注解
有关详细信息,请参阅 Windows SDK 中的 OleGetClipboard 和 OleQueryLinkFromData。
COleClientItem::Close
调用此函数,将 OLE 项的状态从运行状态更改为已加载状态,即在内存中加载其处理程序,但服务器未运行。
void Close(OLECLOSE dwCloseOption = OLECLOSE_SAVEIFDIRTY);
参数
dwCloseOption
一个标志,指定 OLE 项返回到已加载状态时在何种情况下会被保存。 它可以具有以下值之一:
OLECLOSE_SAVEIFDIRTY 保存 OLE 项。
OLECLOSE_NOSAVE 不保存 OLE 项。
OLECLOSE_PROMPTSAVE 提示用户是否保存 OLE 项。
备注
当 OLE 项未运行时,此函数不起作用。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::Close。
COleClientItem::COleClientItem
构造 COleClientItem
对象并将其添加到容器文档的文档项集合中,该集合仅构造 C++ 对象,并且不执行任何 OLE 初始化。
COleClientItem(COleDocument* pContainerDoc = NULL);
参数
pContainerDoc
指向将包含此项的容器文档的指针。 这可以是任何 COleDocument 派生。
注解
如果传递 NULL 指针,则不会向容器文档添加任何内容。 必须显式调用 COleDocument::AddItem。
在使用 OLE 项之前,必须调用以下创建成员函数之一:
COleClientItem::ConvertTo
调用此成员函数将项转换为 clsidNew 指定的类型。
virtual BOOL ConvertTo(REFCLSID clsidNew);
参数
clsidNew
目标类型的类 ID。
返回值
如果成功,则不为 0;否则为 0。
备注
这由 COleConvertDialog 自动调用。 没有必要直接调用它。
COleClientItem::CopyToClipboard
调用此函数可将 OLE 项复制到剪贴板。
void CopyToClipboard(BOOL bIncludeLink = FALSE);
参数
bIncludeLink
如果应将链接信息复制到剪贴板,以允许粘贴链接项,则为 TRUE;否则为 FALSE。
备注
通常,从“编辑”菜单为 Copy 或 Cut 命令编写消息处理程序时,会调用此函数。 如果要实现 Copy 或 Cut 命令,则必须在容器应用程序中实现项选择。
有关详细信息,请参阅 Windows SDK 中的 OleSetClipboard。
COleClientItem::CreateCloneFrom
调用此函数以创建指定 OLE 项副本。
BOOL CreateCloneFrom(const COleClientItem* pSrcItem);
参数
pSrcItem
指向要复制的 OLE 项的指针。
返回值
如果成功,则不为 0;否则为 0。
注解
副本与源项相同。 可以使用此函数来支持撤消操作。
COleClientItem::CreateFromClipboard
调用此函数以从剪贴板内容创建嵌入项。
BOOL CreateFromClipboard(
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
通常从“编辑”菜单上的 Paste 命令的消息处理程序中调用此函数。 (如果 CanPaste 成员函数返回非零,则框架会启用 Paste 命令。)
有关详细信息,请参阅 Windows SDK 中的 OLERENDER 和 FORMATETC。
COleClientItem::CreateFromData
调用此函数以从 COleDataObject
对象创建嵌入项。
BOOL CreateFromData(
COleDataObject* pDataObject,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
pDataObject
指向要从中创建 OLE 项的 COleDataObject 对象的指针。
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
数据传输操作(例如从剪贴板粘贴或拖放操作)提供 COleDataObject
对象,其中包含服务器应用程序提供的信息。 它通常用于重写 CView::OnDrop。
有关详细信息,请参阅 Windows SDK 中的 OleCreateFromData、OLERENDER 和 FORMATETC。
COleClientItem::CreateFromFile
调用此函数以从文件创建嵌入的 OLE 项。
BOOL CreateFromFile(
LPCTSTR lpszFileName,
REFCLSID clsid = CLSID_NULL,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
lpszFileName
指向要从中创建 OLE 项的文件的名称的指针。
clsid
保留供将来使用。
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
如果用户在选中“从文件创建”按钮后从“插入对象”对话框中选择“确定”,则框架会从 COleInsertDialog::CreateItem 调用此函数。
有关详细信息,请参阅 Windows SDK 中的 OleCreateFromFile、OLERENDER 和 FORMATETC。
COleClientItem::CreateLinkFromClipboard
调用此函数以从剪贴板内容创建链接项。
BOOL CreateLinkFromClipboard(
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
通常从“编辑”菜单上的 Paste Link 命令的消息处理程序中调用此函数。 (如果剪贴板包含可链接到的 OLE 项,则会在 COleDocument 的默认实现中启用 Paste Link 命令。)
有关详细信息,请参阅 Windows SDK 中的 OLERENDER 和 FORMATETC。
COleClientItem::CreateLinkFromData
调用此函数以从 COleDataObject
对象创建链接项。
BOOL CreateLinkFromData(
COleDataObject* pDataObject,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
pDataObject
指向要从中创建 OLE 项的 COleDataObject 对象的指针。
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
当用户指示应创建链接时,在删除操作期间调用此函数。 它还可用于处理 Edit Paste 命令。 选择链接选项后,框架会在 COleClientItem::CreateLinkFromClipboard
和 COlePasteSpecialDialog::CreateItem 中调用它。
有关详细信息,请参阅 Windows SDK 中的 OleCreateLinkFromData、OLERENDER 和 FORMATETC。
COleClientItem::CreateLinkFromFile
调用此函数以从文件创建链接的 OLE 项。
BOOL CreateLinkFromFile(
LPCTSTR lpszFileName,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
lpszFileName
指向要从中创建 OLE 项的文件的名称的指针。
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
注解
如果用户在选中“从文件创建”按钮并勾选“链接”复选框后从“插入对象”对话框中选择“确定”,则框架会调用此函数。 它从 COleInsertDialog::CreateItem 进行调用。
有关详细信息,请参阅 Windows SDK 中的 OleCreateLinkToFile、OLERENDER 和 FORMATETC。
COleClientItem::CreateNewItem
调用此函数以创建嵌入项;此函数启动允许用户创建 OLE 项的服务器应用程序。
BOOL CreateNewItem(
REFCLSID clsid,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
clsid
唯一标识要创建的 OLE 项类型的 ID。
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
如果用户在选中“新建”按钮后从“插入对象”对话框中选择“确定”,则框架将调用此函数。
有关详细信息,请参阅 Windows SDK 中的 OleCreate、OLERENDER 和 FORMATETC。
COleClientItem::CreateStaticFromClipboard
调用此函数以从剪贴板内容创建静态项。
BOOL CreateStaticFromClipboard(
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
静态项包含呈现数据,但不包含本机数据;因此,无法对其进行编辑。 如果 CreateFromClipboard 成员函数失败,通常会调用此函数。
有关详细信息,请参阅 Windows SDK 中的 OLERENDER 和 FORMATETC。
COleClientItem::CreateStaticFromData
调用此函数以从 COleDataObject
对象创建静态项。
BOOL CreateStaticFromData(
COleDataObject* pDataObject,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0,
LPFORMATETC lpFormatEtc = NULL);
参数
pDataObject
指向要从中创建 OLE 项的 COleDataObject 对象的指针。
render
指定服务器如何呈现 OLE 项的标志。 有关可能的值,请参阅 Windows SDK 中的 OLERENDER。
cfFormat
指定要在创建 OLE 项时缓存的剪贴板数据格式。
lpFormatEtc
指向 render 为 OLERENDER_FORMAT 或 OLERENDER_DRAW 时所使用的 FORMATETC 结构的指针。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果省略此参数,则默认值用于 FORMATETC
结构中的其他字段。
返回值
如果成功,则不为 0;否则为 0。
备注
静态项包含呈现数据,但不包含本机数据;因此,无法对其进行编辑。 除了可以从任意 COleDataObject
(而不仅仅是从剪贴板)创建静态项之外,这实质上与 CreateStaticFromClipboard 相同。
在选择了“静态”时,在 COlePasteSpecialDialog::CreateItem 中使用。
有关详细信息,请参阅 Windows SDK 中的 OleCreateStaticFromData、OLERENDER 和 FORMATETC。
COleClientItem::Deactivate
调用此函数以停用 OLE 项并释放任何关联的资源。
void Deactivate();
备注
当用户单击项边界外的工作区上的鼠标时,通常会停用就地活动 OLE 项。 请注意,停用 OLE 项将放弃其撤消状态,因此无法调用 ReactivateAndUndo 成员函数。
如果应用程序支持撤消,请不要调用 Deactivate
;而是调用 DeactivateUI。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceObject::InPlaceDeactivate。
COleClientItem::DeactivateUI
当用户停用已就地激活的项时调用此函数。
void DeactivateUI();
备注
此函数将容器应用程序的用户界面还原为其原始状态,隐藏为就地激活创建的任何菜单和其他控件。
此函数不会刷新项的撤消状态信息。 保留该信息,以便稍后可以使用 ReactivateAndUndo 在服务器应用程序中执行撤消命令,以防在停用项后立即选择容器的撤消命令。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceObject::InPlaceDeactivate。
COleClientItem::Delete
调用此函数以从容器文档中删除 OLE 项。
void Delete(BOOL bAutoDelete = TRUE);
参数
bAutoDelete
指定是否要从文档中删除该项。
备注
此函数调用 Release 成员函数,该函数反过来删除项的 C++ 对象,从而永久删除文档中的 OLE 项。 如果嵌入了 OLE 项,则会删除该项的本机数据。 它始终关闭正在运行的服务器;因此,如果项是打开的链接,此函数将关闭它。
COleClientItem::DoDragDrop
调用 DoDragDrop
成员函数以执行拖放操作。
DROPEFFECT DoDragDrop(
LPCRECT lpItemRect,
CPoint ptOffset,
BOOL bIncludeLink = FALSE,
DWORD dwEffects = DROPEFFECT_COPY | DROPEFFECT_MOVE,
LPCRECT lpRectStartDrag = NULL);
参数
lpItemRect
客户端坐标中项在屏幕上的矩形(像素)。
ptOffset
lpItemRect 中的偏移量,即鼠标在拖动时的位置。
bIncludeLink
如果链接数据应复制到剪贴板,那么将此参数设置为 TRUE。 如果服务器应用程序不支持链接,则将其设置为 FALSE。
dwEffects
确定拖动源在拖动操作中允许的效果。
lpRectStartDrag
指向定义拖动实际开始位置的矩形的指针。 有关更多信息,请参见下面的“备注”部分。
返回值
DROPEFFECT 值。 如果值为 DROPEFFECT_MOVE,则应删除原始数据。
注解
拖放操作不会立即启动。 它等待鼠标光标离开 lpRectStartDrag 指定的矩形,或者直到经过了指定的毫秒数。 如果 lpRectStartDrag 为 NULL,则矩形的大小为一个像素。
延迟时间由注册表项设置指定。 可以通过调用 CWinApp::WriteProfileString 或 CWinApp::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。
COleClientItem::DoVerb
调用 DoVerb
以执行指定的谓词。
virtual BOOL DoVerb(
LONG nVerb,
CView* pView,
LPMSG lpMsg = NULL);
参数
nVerb
指定要执行的谓词。 它可以包含下列其中一项:
值 | 含义 | 符号 |
---|---|---|
- 0 | 主谓词 | OLEIVERB_PRIMARY |
- 1 | 辅助谓词 | (无) |
- 1 | 显示编辑项 | OLEIVERB_SHOW |
2- | 在单独的窗口中编辑项 | OLEIVERB_OPEN |
- 3 | 隐藏项 | OLEIVERB_HIDE |
-1 值通常是另一个谓词的别名。 如果不支持打开编辑,则 -2 的效果与 -1 相同。 有关其他值,请参阅 Windows SDK 中的 IOleObject::DoVerb。
pView
指向视图窗口的指针;服务器使用此参数进行就地激活。 如果容器应用程序不允许就地激活,则此参数应为 NULL。
lpMsg
指向导致项被激活的消息的指针。
返回值
如果成功执行谓词,则为非零;否则为 0。
备注
此函数调用 Activate 成员函数来执行谓词。 它还会捕获异常,并在引发异常时向用户显示消息框。
如果主谓词为 Edit,并在 nVerb 参数中指定零,则启动服务器应用程序以允许编辑 OLE 项。 如果容器应用程序支持就地激活,则可以就地进行编辑。 如果容器不支持就地激活(或者如果指定 Open 谓词),则会在单独的窗口中启动服务器,并且可以在那里进行编辑。 通常,当容器应用程序用户双击 OLE 项时,nVerb 参数中主谓词的值决定了用户可以执行的操作。 但是,如果服务器仅支持一个操作,则无论 nVerb 参数中指定了哪个值,它都执行该操作。
COleClientItem::Draw
调用此函数,使用指定的设备上下文将 OLE 项绘制到指定的边框中。
BOOL Draw(
CDC* pDC,
LPCRECT lpBounds,
DVASPECT nDrawAspect = (DVASPECT)-1);
参数
pDC
指向用于绘制 OLE 项的 CDC 对象的指针。
lpBounds
指向 CRect 对象或 RECT
结构的指针,该对象或结构定义在其中绘制 OLE 项的边框(在设备上下文确定的逻辑单元中)。
nDrawAspect
指定 OLE 项的方面,即应如何显示它。 如果 nDrawAspect 为 -1,则使用通过 SetDrawAspect 设置的最后一个方面。 有关该标志可能值的更多信息,请参阅 SetDrawAspect。
返回值
如果成功,则不为 0;否则为 0。
注解
该函数可以使用由 COleServerItem
的 OnDraw 成员函数创建的 OLE 项的元文件表示形式。
通常使用 Draw
进行屏幕显示,将屏幕设备上下文作为 pDC 传递。 在这种情况下,只需指定前两个参数。
lpBounds 参数标识目标设备上下文中的矩形(相对于其当前映射模式)。 呈现可能涉及缩放图片,容器应用程序可以使用呈现施加在显示的视图和最终打印的图像之间缩放的视图。
有关详细信息,请参阅 Windows SDK 中的 IViewObject::Draw。
COleClientItem::GetActiveView
返回项已就地激活的视图。
CView* GetActiveView() const;
返回值
指向视图的指针;如果项未就地激活,则为 NULL。
COleClientItem::GetCachedExtent
调用此函数以检索 OLE 项的大小。
BOOL GetCachedExtent(
LPSIZE lpSize,
DVASPECT nDrawAspect = (DVASPECT)-1);
参数
lpSize
指向 SIZE
结构或 CSize 对象的指针,该结构或对象将接收大小信息。
nDrawAspect
指定要检索其边界的 OLE 项的方面。 有关可能的值,请参阅 SetDrawAspect。
返回值
如果成功,则为非零;如果 OLE 项为空,则为 0。
备注
此函数提供与 GetExtent 相同的信息。 但是,可以在处理其他 OLE 处理程序(如 OnChange)期间调用 GetCachedExtent
以获取范围信息。 维度以 MM_HIMETRIC 为单位。
这是可能的,因为 GetCachedExtent
使用 IViewObject2 接口,而不是使用 IOleObject 接口获取此项的范围。 IViewObject2
COM 对象缓存上一次调用 IViewObject::Draw 时使用的范围信息。
有关详细信息,请参阅 Windows SDK 中的 IViewObject2::GetExtent。
COleClientItem::GetClassID
将项的类 ID 返回到 pClassID 指向的内存中。
void GetClassID(CLSID* pClassID) const;
参数
pClassID
指向 CLSID 类型的标识符的指针,用于检索类 ID。 有关 CLSID 的信息,请参阅 Windows SDK。
备注
类 ID 是一个 128 位数字,用于唯一标识编辑项的应用程序。
有关详细信息,请参阅 Windows SDK 中的 IPersist::GetClassID。
COleClientItem::GetClipboardData
调用此函数以获取一个 COleDataSource
对象,该对象包含将通过调用 CopyToClipboard 成员函数放置在剪贴板上的所有数据。
void GetClipboardData(
COleDataSource* pDataSource,
BOOL bIncludeLink = FALSE,
LPPOINT lpOffset = NULL,
LPSIZE lpSize = NULL);
参数
pDataSource
指向将接收 OLE 项中包含的数据的 COleDataSource 对象的指针。
bIncludeLink
如果应包含链接数据,则为 TRUE;否则为 FALSE。
lpOffset
鼠标光标与对象原点的偏移量(以像素为单位)。
lpSize
对象大小(以像素为单位)。
备注
GetClipboardData
称为 OnGetClipboardData 的默认实现。 只有当你希望提供 CopyToClipboard
提供的数据格式以外的数据格式时,才重写 OnGetClipboardData
。 将这些格式放置在调用 CopyToClipboard
之前或之后的 COleDataSource
对象中,然后将对象 COleDataSource
传递给 COleDataSource::SetClipboard 函数。 例如,如果希望 OLE 项在其容器文档中的位置在剪贴板上随它一起出现,则需要定义自己的格式来传递该信息,并在调用 CopyToClipboard
前将其置于 COleDataSource
中。
COleClientItem::GetDocument
调用此函数以获取指向包含 OLE 项的文档的指针。
COleDocument* GetDocument() const;
返回值
指向包含 OLE 项的文档的指针。 如果项不是文档的一部分,则为 NULL。
注解
此指针允许访问作为参数传递给 COleClientItem
构造函数的 COleDocument
对象。
COleClientItem::GetDrawAspect
调用 GetDrawAspect
成员函数以确定项的当前“方面”或视图。
DVASPECT GetDrawAspect() const;
返回值
DVASPECT 枚举中的值,其值在 SetDrawAspect 的引用中列出。
注解
该方面指定项的呈现方式。
COleClientItem::GetExtent
调用此函数以检索 OLE 项的大小。
BOOL GetExtent(
LPSIZE lpSize,
DVASPECT nDrawAspect = (DVASPECT)- 1);
参数
lpSize
指向 SIZE
结构或 CSize
对象的指针,该结构或对象将接收大小信息。
nDrawAspect
指定要检索其边界的 OLE 项的方面。 有关可能的值,请参阅 SetDrawAspect。
返回值
如果成功,则为非零;如果 OLE 项为空,则为 0。
备注
如果使用 Microsoft 基础类库编写服务器应用程序,此函数将导致执行相应 COleServerItem
对象的 OnGetExtent 成员函数。 请注意,检索的大小可能与 SetExtent 成员函数上次设置的大小不同;SetExtent
指定的大小被视为建议大小。 维度以 MM_HIMETRIC 为单位。
注意
请勿在处理 OLE 处理程序(如 OnChange)期间调用 GetExtent
。 请改为调用 GetCachedExtent。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::GetExtent。
COleClientItem::GetIconFromRegistry
调用此成员函数以检索与特定 CLSID 服务器关联的图标资源的句柄。
HICON GetIconFromRegistry() const;
static HICON GetIconFromRegistry(CLSID& clsid);
参数
clsid
对与图标关联的服务器的 CLSID 的引用。
返回值
图标资源的有效句柄,如果找不到服务器的图标或默认图标,则为 NULL。
备注
即使服务器已运行,此成员函数也不会启动服务器或动态获取图标。 相反,此成员函数会打开服务器的可执行映像,并在注册服务器时检索与服务器关联的静态图标。
COleClientItem::GetIconicMetafile
检索用于绘制项图标的元文件。
HGLOBAL GetIconicMetafile();
返回值
如果成功,则为元文件句柄;否则为 NULL。
备注
如果没有当前图标,则返回默认图标。 这由 MFC/OLE 对话框自动调用,通常不会直接调用。
此函数还调用 SetIconicMetafile 来缓存元文件供以后使用。
COleClientItem::GetInPlaceWindow
调用 GetInPlaceWindow
成员函数以获取指向已打开项进行就地编辑的窗口的指针。
CWnd* GetInPlaceWindow();
返回值
指向项就地编辑窗口的指针;如果项不处于活动状态或其服务器不可用,则为 NULL。
备注
应仅针对就地活动项调用此函数。
COleClientItem::GetItemState
调用此函数以获取 OLE 项的当前状态。
UINT GetItemState() const;
返回值
枚举 COleClientItem::ItemState
值,可以是下列值之一:emptyState
、loadedState
、openState
、activeState
、activeUIState
。 有关这些状态的信息,请参阅文章“容器:客户端项状态”。
备注
若要在 OLE 项的状态更改时收到通知,请使用 OnChange 成员函数。
有关详细信息,请参阅文章”容器:客户端项状态”。
COleClientItem::GetLastStatus
返回最后一个 OLE 操作的状态代码。
SCODE GetLastStatus() const;
返回值
SCODE 值。
备注
对于返回 FALSE 的 BOOL 值的成员函数或返回 NULL 的其他成员函数,GetLastStatus
返回更详细的失败信息。 请注意,大多数 OLE 成员函数对于更严重的错误都会引发异常。 有关 SCODE 解释的具体信息取决于上次返回 SCODE 值的基础 OLE 调用。
有关 SCODE 的详细信息,请参阅 Windows SDK 文档中的 COM 错误代码结构。
COleClientItem::GetLinkUpdateOptions
调用此函数以获取 OLE 项的链接更新选项的当前值。
OLEUPDATE GetLinkUpdateOptions();
返回值
以下值之一:
OLEUPDATE_ALWAYS 尽可能更新链接项。 此选项支持“链接”对话框中的“自动链接更新”单选按钮。
OLEUPDATE_ONCALL 仅在容器应用程序请求时更新链接项(调用 UpdateLink 成员函数时)。 此选项支持“链接”对话框中的“手动链接更新”单选按钮。
注解
这是一项高级操作。
此函数由 COleLinksDialog 类自动调用。
有关详细信息,请参阅 Windows SDK 中的 IOleLink::GetUpdateOptions。
COleClientItem::GetType
调用此函数以确定 OLE 项是嵌入、链接还是静态。
OLE_OBJTYPE GetType() const;
返回值
具有以下值之一的无符号整数:
OT_LINK OLE 项是一个链接。
OT_EMBEDDED OLE 项是嵌入项。
OT_STATIC OLE 项是静态的,也就是说,它仅包含呈现数据,而不是本机数据,因此无法编辑。
COleClientItem::GetUserType
调用此函数以获取描述 OLE 项类型(如“Word 文档”)的用户可见字符串。
void GetUserType(
USERCLASSTYPE nUserClassType,
CString& rString);
参数
nUserClassType
一个值,指示描述 OLE 项类型的字符串的所需变体。 可以具有以下值之一:
USERCLASSTYPE_FULL 向用户显示的完整类型名称。
USERCLASSTYPE_SHORT 短名称(最大 15 个字符),在弹出菜单和“编辑链接”对话框中使用。
USERCLASSTYPE_APPNAME 服务类的应用程序的名称。
rString
对 CString 对象的引用,将对其返回描述 OLE 项类型的字符串。
注解
这通常是系统注册数据库中的条目。
如果请求完整类型名称但不可用,则改用短名称。 如果在注册数据库中找不到 OLE 项类型的条目,或者没有注册 OLE 项类型的用户类型,则使用当前存储在 OLE 项中的用户类型。 如果该用户类型名称为空字符串,则使用“未知对象”。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::GetUserType。
COleClientItem::IsInPlaceActive
调用此函数以查看 OLE 项是否处于就地活动状态。
BOOL IsInPlaceActive() const;
返回值
如果 OLE 项处于就地活动状态,则为非零;否则为 0。
注解
通常执行不同的逻辑,具体取决于项是否已就地编辑。 该函数检查当前项状态是否等于 activeState
或 activeUIState
。
COleClientItem::IsLinkUpToDate
调用此函数以查看 OLE 项是否处于最新状态。
BOOL IsLinkUpToDate() const;
返回值
如果 OLE 项处于最新状态,则为非零;否则为 0。
注解
如果源文档已更新,则链接项可能已过期。 同样,包含链接的嵌入项也会过时。 该函数对 OLE 项执行递归检查。 请注意,确定 OLE 项是否过期可能与实际执行更新一样昂贵。
这由 COleLinksDialog 实现自动调用。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::IsUpToDate。
COleClientItem::IsModified
调用此函数以查看 OLE 项是否为脏(自上次保存以来修改)。
BOOL IsModified() const;
返回值
如果 OLE 项为脏,则为非零;否则为 0。
备注
有关详细信息,请参阅 Windows SDK 中的 IPersistStorage::IsDirty。
COleClientItem::IsOpen
调用此函数以查看 OLE 项是否处于打开状态;也就是说,在单独窗口中运行的服务器应用程序实例中打开。
BOOL IsOpen() const;
返回值
如果 OLE 项处于打开状态,则为非零;否则为 0。
备注
它用于确定何时使用阴影模式绘制对象。 打开的对象应在对象顶部绘制阴影图案。 可以使用 CRectTracker 对象来实现此目的。
COleClientItem::IsRunning
调用此函数以查看 OLE 项是否正在运行;也就是说,该项是否在服务器应用程序中加载和运行。
BOOL IsRunning() const;
返回值
如果 OLE 项处于运行状态,则为非零;否则为 0。
注解
有关详细信息,请参阅 Windows SDK 中的 OleIsRunning。
COleClientItem::OnActivate
由框架调用,以通知该项已就地激活。
virtual void OnActivate();
注解
请注意,调用此函数以指示服务器正在运行,而不是指示其用户界面已安装在容器应用程序中。 此时,对象没有活动的用户界面(不是 activeUIState
)。 它尚未安装其菜单或工具栏。 发生这种情况时,调用 OnActivateUI 成员函数。
默认实现调用 OnChange 成员函数,使用 OLE_CHANGEDSTATE 作为参数。 重写此函数以在项处于就地活动状态时执行自定义处理。
COleClientItem::OnActivateUI
当对象进入活动 UI 状态时,框架将调用 OnActivateUI
。
virtual void OnActivateUI();
备注
该对象现已安装其工具栏和菜单。
默认实现会记住服务器的 HWND,以供以后的 GetServerWindow
调用。
COleClientItem::OnChange
当用户修改、保存或关闭 OLE 项时由框架调用。
virtual void OnChange(
OLE_NOTIFICATION nCode,
DWORD dwParam);
参数
nCode
服务器更改此项的原因。 它可以具有以下值之一:
OLE_CHANGED OLE 项的外观已更改。
OLE_SAVED OLE 项已保存。
OLE_CLOSED OLE 项已关闭。
OLE_CHANGED_STATE OLE 项已从一种状态更改为另一种状态。
dwParam
如果 nCode 是 OLE_SAVED 或 OLE_CLOSED,则不使用此参数。 如果 nCode 是 OLE_CHANGED,则此参数指定已更改的 OLE 项的方面。 有关可能的值,请参阅 COleClientItem::Draw 的 dwParam 参数。 如果 nCode 是 OLE_CHANGED_STATE,则此参数是 COleClientItem::ItemState
枚举值,并描述正在输入的状态。 可以具有以下值之一:emptyState
、loadedState
、openState
、activeState
或 activeUIState
。
备注
(如果使用 Microsoft 基础类库编写服务器应用程序,则调用此函数以响应 COleServerDoc
或 COleServerItem
的 Notify
成员函数。)如果 nCode 为 OLE_CHANGED 或 OLE_SAVED,则默认实现将容器文档标记为“已修改”。
对于 OLE_CHANGED_STATE,从 GetItemState 返回的当前状态仍然是旧状态,表示在此状态更改之前的当前状态。
重写此函数以响应 OLE 项状态的更改。 通常通过使显示项的区域失效来更新项的外观。 在重写开始时调用基类实现。
COleClientItem::OnChangeItemPosition
由框架调用,以通知容器 OLE 项的范围在就地激活期间已更改。
virtual BOOL OnChangeItemPosition(const CRect& rectPos);
参数
rectPos
指示项相对于容器应用程序工作区的位置。
返回值
如果项位置成功更改,则为非零;否则为 0。
注解
默认实现确定 OLE 项的新可见矩形,并使用新值调用 SetItemRects。 默认实现计算项的可见矩形,并将该信息传递给服务器。
重写此函数以将特殊规则应用于重设大小/移动操作。 如果应用程序是用 MFC 编写的,则此调用结果是因为名为 COleServerDoc::RequestPositionChange 的服务器。
COleClientItem::OnDeactivate
当 OLE 项从就地活动状态 (activeState
) 转换为已加载状态时,框架将调用该函数,这意味着在就地激活后会停用它。
virtual void OnDeactivate();
备注
请注意,调用此函数以指示 OLE 项已关闭,而不是表示已从容器应用程序中删除其用户界面。 发生这种情况时,调用 OnDeactivateUI 成员函数。
默认实现调用 OnChange 成员函数,使用 OLE_CHANGEDSTATE 作为参数。 重写此函数,以在就地活动项停用时执行自定义处理。 例如,如果支持容器应用程序中的撤消命令,则可以重写此函数以放弃撤消状态,指示在停用项后无法撤消对 OLE 项执行的最后一个操作。
COleClientItem::OnDeactivateAndUndo
当用户在就地激活 OLE 项后调用撤消命令时,由框架调用。
virtual void OnDeactivateAndUndo();
备注
默认实现调用 DeactivateUI,以停用服务器的用户界面。 如果在容器应用程序中实现撤消命令,请重写此函数。 在重写中,调用函数的基类版本,然后撤消在应用程序中执行的最后一个命令。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceSite::DeactivateAndUndo。
COleClientItem::OnDeactivateUI
当用户停用就地激活的项时调用。
virtual void OnDeactivateUI(BOOL bUndoable);
参数
bUndoable
指定编辑更改是否可撤消。
备注
此函数将容器应用程序的用户界面还原为其原始状态,隐藏为就地激活创建的任何菜单和其他控件。
如果 bUndoable 为 FALSE,则容器应禁用撤消命令,实际上就是放弃容器的撤消状态,因为它指示服务器执行的最后一个操作不可撤消。
COleClientItem::OnDiscardUndoState
当用户在编辑 OLE 项时执行放弃撤消状态的操作时,由框架调用。
virtual void OnDiscardUndoState();
注解
默认实现不执行任何操作。 如果在容器应用程序中实现撤消命令,请重写此函数。 在重写中,放弃容器应用程序的撤消状态。
如果服务器是使用 Microsoft 基础类库编写的,则服务器可以通过调用 COleServerDoc::DiscardUndoState 来调用此函数。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceSite::DiscardUndoState。
COleClientItem::OnGetClipboardData
框架调用此函数来获取 COleDataSource
对象,该对象包含将通过调用 CopyToClipboard 或 DoDragDrop 成员函数放置在剪贴板上的所有数据。
virtual COleDataSource* OnGetClipboardData(
BOOL bIncludeLink,
LPPOINT lpOffset,
LPSIZE lpSize);
参数
bIncludeLink
如果链接数据应复制到剪贴板,请将此参数设置为 TRUE。 如果服务器应用程序不支持链接,请将此参数设置为 FALSE。
lpOffset
指向鼠标光标与对象原点的偏移量(以像素为单位)的指针。
lpSize
指向对象大小(以像素为单位)的指针。
返回值
指向包含剪贴板数据的 COleDataSource 对象的指针。
备注
此函数的默认实现调用 GetClipboardData。
COleClientItem::OnGetClipRect
框架调用 OnGetClipRect
成员函数,以获取正在就地编辑的项的剪裁矩形坐标。
virtual void OnGetClipRect(CRect& rClipRect);
参数
rClipRect
指向 CRect 类对象的指针,该对象将保存项的剪裁矩形坐标。
备注
坐标相对于容器应用程序窗口的工作区(以像素为单位)。
默认实现仅返回项处于就地活动状态的视图的客户端矩形。
COleClientItem::OnGetItemPosition
框架调用 OnGetItemPosition
成员函数,以获取正在就地编辑的项的坐标。
virtual void OnGetItemPosition(CRect& rPosition);
参数
rPosition
对将包含项的位置坐标的 CRect 对象的引用。
注解
坐标相对于容器应用程序窗口的工作区(以像素为单位)。
此函数的默认实现不执行任何操作。 支持就地编辑的应用程序需要此函数的实现。
COleClientItem::OnGetWindowContext
项就地激活时由框架调用。
virtual BOOL OnGetWindowContext(
CFrameWnd** ppMainFrame,
CFrameWnd** ppDocFrame,
LPOLEINPLACEFRAMEINFO lpFrameInfo);
参数
ppMainFrame
指向主框架窗口的指针。
ppDocFrame
指向文档框架窗口的指针。
lpFrameInfo
指向将接收帧窗口信息的 OLEINPLACEFRAMEINFO 结构的指针。
返回值
如果成功,则不为 0;否则为 0。
注解
此函数用于检索有关 OLE 项的父窗口的信息。
如果容器是 MDI 应用程序,则默认实现将返回指向 ppMainFrame 中的 CMDIFrameWnd 对象的指针,以及指向 ppDocFrame 中活动 CMDIChildWnd 对象的指针。 如果容器是 SDI 应用程序,则默认实现将返回指向 ppMainFrame 中的 CFrameWnd 对象的指针,并在 ppDocFrame 中返回 NULL。 默认实现还填充 lpFrameInfo 的成员。
仅当默认实现不符合应用程序时重写此函数;例如,如果应用程序具有不同于 SDI 或 MDI 的用户界面范例。 这是一个高级可重写函数。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceSite::GetWindowContext 和 OLEINPLACEFRAMEINFO 结构。
COleClientItem::OnInsertMenus
在就地激活期间由框架调用,将容器应用程序的菜单插入到空菜单中。
virtual void OnInsertMenus(
CMenu* pMenuShared,
LPOLEMENUGROUPWIDTHS lpMenuWidths);
参数
pMenuShared
指向空菜单。
lpMenuWidths
指向一个包含六个 LONG 值的数组,这些值指示以下每个菜单组中有多少个菜单:文件、编辑、容器、对象、窗口、帮助。 容器应用程序负责“文件”、“容器”和“窗口”菜单组,它们分别对应该数组的元素 0、2 和 4。
注解
然后,此菜单将传递给服务器,该服务器插入其自己的菜单,并创建复合菜单。 可以重复调用此函数以生成多个复合菜单。
默认实现将就地容器菜单插入到 pMenuShared;即“文件”、“容器”和“窗口”菜单组。 CDocTemplate::SetContainerInfo 用于设置此菜单资源。 默认实现还会根据菜单资源将适当的值分配给 lpMenuWidths 中的元素 0、2 和 4。 如果默认实现不适合应用程序,则重写此函数;例如,如果应用程序不使用文档模板将资源与文档类型相关联。 如果重写此函数,还应重写 OnSetMenu 和 OnRemoveMenus。 这是一个高级可重写函数。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceFrame::InsertMenus。
COleClientItem::OnRemoveMenus
由框架调用,以在就地激活结束时从指定的复合菜单中删除容器菜单。
virtual void OnRemoveMenus(CMenu* pMenuShared);
参数
pMenuShared
指向通过调用 OnInsertMenus 成员函数构造的复合菜单。
备注
默认实现从 pMenuShared 中删除就地容器菜单,即“文件”、“容器”和“窗口”菜单组。 如果默认实现不适合应用程序,则重写此函数;例如,如果应用程序不使用文档模板将资源与文档类型相关联。 如果重写此函数,则还应重写 OnInsertMenus 和 OnSetMenu。 这是一个高级可重写函数。
如果服务器多次调用 ,则 pMenuSharedOnInsertMenus
上的子菜单可由多个复合菜单共享。 因此,不应删除 OnRemoveMenus
重写中的任何子菜单;你只需要将它们分离。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceFrame::RemoveMenus。
COleClientItem::OnScrollBy
由框架调用,以滚动 OLE 项来响应源自服务器的请求。
virtual BOOL OnScrollBy(CSize sizeExtent);
参数
sizeExtent
指定要在 x 和 y 方向滚动的距离(以像素为单位)。
返回值
如果项滚动,则为非零;如果无法滚动项,则为 0。
备注
例如,如果 OLE 项部分可见,并且用户在执行就地编辑时将移出可见区域,则调用此函数以保持光标可见。 默认实现不执行任何操作。 重写此函数以按指定量滚动项。 请注意,由于滚动,OLE 项的可见部分可能会更改。 调用 SetItemRects 以更新项的可见矩形。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceSite::Scroll。
COleClientItem::OnSetMenu
当就地激活开始和结束时,由框架调用两次;第一次安装复合菜单,第二次(holemenu 等于 NULL)将其删除。
virtual void OnSetMenu(
CMenu* pMenuShared,
HOLEMENU holemenu,
HWND hwndActiveObject);
参数
pMenuShared
指向通过调用 OnInsertMenus 成员函数和 InsertMenu
函数构造的复合菜单。
holemenu
OleCreateMenuDescriptor
函数返回的菜单描述符的句柄;如果要删除调度代码,则为 NULL。
hwndActiveObject
OLE 项的“编辑”窗口句柄。 这是将从 OLE 接收编辑命令的窗口。
备注
默认实现安装或删除复合菜单,然后调用 OleSetMenuDescriptor 函数来安装或删除调度代码。 如果默认实现不适合应用程序,请重写此函数。 如果重写此函数,则还应重写 OnInsertMenus 和 OnRemoveMenus。 这是一个高级可重写函数。
有关详细信息,请参阅 Windows SDK 中的 OleCreateMenuDescriptor、OleSetMenuDescriptor 和 IOleInPlaceFrame::SetMenu。
COleClientItem::OnShowControlBars
由框架调用,以显示和隐藏容器应用程序的控件条。
virtual BOOL OnShowControlBars(
CFrameWnd* pFrameWnd,
BOOL bShow);
参数
pFrameWnd
指向容器应用程序框架窗口的指针。 这可以是主框架窗口或 MDI 子窗口。
bShow
指定是要显示还是隐藏控件条。
返回值
如果函数调用导致控件条状态发生更改,那么为非零;如果调用没有更改,或者 pFrameWnd 不指向容器的框架窗口,则为 0。
备注
如果控件条处于 bShow 指定的状态,那么此函数返回 0。例如,如果控件条处于隐藏状态且 bShow 为 FALSE,则会发生此情况。
默认实现从顶级框架窗口中删除工具栏。
COleClientItem::OnShowItem
由框架调用以显示 OLE 项,使其在编辑过程中完全可见。
virtual void OnShowItem();
备注
当容器应用程序支持指向嵌入项的链接(也就是说,如果已从 COleLinkingDoc 派生文档类)时,将使用该函数。 此函数是在就地激活期间调用的,或者当 OLE 项是链接源并且用户想要对其进行编辑时调用。 默认实现激活容器文档上的第一个视图。 重写此函数以滚动文档,以便 OLE 项可见。
COleClientItem::OnUpdateFrameTitle
在就地激活期间由框架调用,以更新框架窗口的标题栏。
virtual BOOL OnUpdateFrameTitle();
返回值
如果此函数成功更新帧标题,则为非零,否则为零。
注解
默认实现不会更改框架窗口标题。 如果应用程序需要使用其他框架标题,例如“docname 中的服务器应用 - 项”(如“Microsoft Excel - REPORT.DOC 中的电子表格”),请重写此函数。 这是一个高级可重写函数。
COleClientItem::ReactivateAndUndo
调用此函数可重新激活 OLE 项,并在就地编辑期间撤消用户执行的最后一个操作。
BOOL ReactivateAndUndo();
返回值
如果成功,则不为 0;否则为 0。
注解
如果容器应用程序支持撤消命令,则在用户在停用 OLE 项后立即选择撤消命令时调用此函数。
如果使用 Microsoft 基础类库编写服务器应用程序,此函数将导致服务器调用 COleServerDoc::OnReactivateAndUndo。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceObject::ReactivateAndUndo。
COleClientItem::Release
调用此函数以清理 OLE 项使用的资源。
virtual void Release(OLECLOSE dwCloseOption = OLECLOSE_NOSAVE);
参数
dwCloseOption
一个标志,指定 OLE 项返回到已加载状态时在何种情况下会被保存。 有关可能值的列表,请参阅 COleClientItem::Close。
备注
Release
由 COleClientItem
析构函数调用。
有关详细信息,请参阅 Windows SDK 中的 IUnknown::Release。
COleClientItem::Reload
关闭并重新加载项。
BOOL Reload();
返回值
如果成功,则不为 0;否则为 0。
注解
通过调用 ActivateAs 将项激活为其他类型的项后调用 Reload
函数。
COleClientItem::Run
运行与此项关联的应用程序。
void Run();
备注
调用 Run
成员函数以在激活项之前启动服务器应用程序。 这由 Activate 和 DoVerb 自动完成,因此通常不需要调用此函数。 如果需要运行服务器才能在执行 DoVerb 之前设置项属性(如 SetExtent),请调用此函数。
COleClientItem::SetDrawAspect
调用 SetDrawAspect
成员函数以设置项的“方面”或视图。
virtual void SetDrawAspect(DVASPECT nDrawAspect);
参数
nDrawAspect
DVASPECT 枚举中的值。 此参数可以具有下列值之一:
DVASPECT_CONTENT 项以这样一种方式表示,它可以在容器中显示为嵌入对象。
DVASPECT_THUMBNAIL 项以“缩略图”表示形式呈现,以便可以在浏览工具中显示。
DVASPECT_ICON 项由图标表示。
DVASPECT_DOCPRINT 项表示为使用“文件”菜单中的 Print 命令打印的项。
备注
当使用该函数的 nDrawAspect 参数的默认值时,该方面指定 Draw 呈现项的方式。
此函数由更改图标(以及其他自动调用更改图标的对话框)自动调用,以便在用户请求时启用图标显示方面。
COleClientItem::SetExtent
调用此函数可指定 OLE 项可用的空间量。
void SetExtent(
const CSize& size,
DVASPECT nDrawAspect = DVASPECT_CONTENT);
参数
size
包含大小信息的 CSize 对象。
nDrawAspect
指定要设置其边界的 OLE 项的方面。 有关可能的值,请参阅 SetDrawAspect。
注解
如果使用 Microsoft 基础类库编写服务器应用程序,此函数将导致调用相应 COleServerItem
对象的 OnSetExtent 成员函数。 然后,OLE 项可以相应地调整其显示。 维度必须以 MM_HIMETRIC 为单位。 当用户调整 OLE 项的大小或支持某种形式的布局协商时,调用此函数。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::SetExtent。
COleClientItem::SetHostNames
调用此函数,指定容器应用程序的名称和嵌入的 OLE 项的容器名称。
void SetHostNames(
LPCTSTR lpszHost,
LPCTSTR lpszHostObj);
参数
lpszHost
指向容器应用程序的用户可见名称的指针。
lpszHostObj
指向包含 OLE 项的容器的标识字符串的指针。
注解
如果使用 Microsoft 基础类库编写服务器应用程序,此函数将调用包含 OLE 项的 COleServerDoc
文档的 OnSetHostNames 成员函数。 编辑 OLE 项时,此信息在窗口标题中使用。 每次加载容器文档时,框架都会针对文档中的所有 OLE 项调用此函数。 SetHostNames
仅适用于嵌入项。 每次激活嵌入的 OLE 项进行编辑时,都无需调用此函数。
当加载对象或将文件保存在其他名称下时,也会根据应用程序名称和文档名称自动调用此函数。 因此,通常不需要直接调用此函数。
有关详细信息,请参阅 Windows SDK 中的 IOleObject::SetHostNames。
COleClientItem::SetIconicMetafile
缓存用于绘制项图标的元文件。
BOOL SetIconicMetafile(HGLOBAL hMetaPict);
参数
hMetaPict
用于绘制项图标的元文件的句柄。
返回值
如果成功,则不为 0;否则为 0。
备注
使用 GetIconicMetafile 检索元文件。
hMetaPict 参数将复制到项中;因此,调用方必须释放 hMetaPict。
COleClientItem::SetItemRects
调用此函数以设置边框或 OLE 项的可见矩形。
BOOL SetItemRects(
LPCRECT lpPosRect = NULL,
LPCRECT lpClipRect = NULL);
参数
lprcPosRect
指向包含相对于其父窗口的 OLE 项边界(以客户端坐标表示)的矩形的指针。
lprcClipRect
指向包含相对于其父窗口的 OLE 项的可见部分边界(以客户端坐标表示)的矩形的指针。
返回值
如果成功,则返回非零值;否则返回 0。
备注
此函数由 OnChangeItemPosition 成员函数的默认实现调用。 每当 OLE 项的位置或可见部分发生更改时,都应调用此函数。 通常,这意味着从视图的 OnSize 和 OnScrollBy 成员函数调用它。
有关详细信息,请参阅 Windows SDK 中的 IOleInPlaceObject::SetObjectRects。
COleClientItem::SetLinkUpdateOptions
调用此函数,为指定链接项的呈现设置链接更新选项。
void SetLinkUpdateOptions(OLEUPDATE dwUpdateOpt);
参数
dwUpdateOpt
此项的链接更新选项的值。 此值必须为下列值之一:
OLEUPDATE_ALWAYS 尽可能更新链接项。 此选项支持“链接”对话框中的“自动链接更新”单选按钮。
OLEUPDATE_ONCALL 仅在容器应用程序请求时更新链接项(调用 UpdateLink 成员函数时)。 此选项支持“链接”对话框中的“手动链接更新”单选按钮。
备注
通常,不应在“链接”对话框中更改用户选择的更新选项。
有关详细信息,请参阅 Windows SDK 中的 IOleLink::SetUpdateOptions。
COleClientItem::SetPrintDevice
调用此函数可更改此项的打印目标设备。
BOOL SetPrintDevice(const DVTARGETDEVICE* ptd);
BOOL SetPrintDevice(const PRINTDLG* ppd);
参数
ptd
指向 DVTARGETDEVICE 数据结构的指针,其中包含有关新打印目标设备的信息。 可以为 NULL。
ppd
指向 PRINTDLG 数据结构的指针,其中包含有关新打印目标设备的信息。 可以为 NULL。
返回值
如果该函数成功,则为非零;否则为 0。
备注
此函数更新项的打印目标设备,但不刷新呈现缓存。 若要更新项的呈现缓存,请调用 UpdateLink。
此函数的参数包含 OLE 系统用于标识目标设备的信息。 PRINTDLG
结构包含 Windows 用于初始化常见打印对话框的信息。 用户关闭对话框后,Windows 将返回有关此结构中用户选择的信息。 CPrintDialog 对象的 m_pd
成员是一个 PRINTDLG
结构。
有关此结构的详细信息,请参阅 Windows SDK 中的 PRINTDLG。
有关详细信息,请参阅 Windows SDK 中的 DVTARGETDEVICE。
COleClientItem::UpdateLink
调用此函数可立即更新 OLE 项的呈现数据。
BOOL UpdateLink();
返回值
若成功,则为非零;否则为 0。
备注
对于链接项,此函数将查找链接源以获取 OLE 项的新呈现。 此过程可能涉及运行一个或多个服务器应用程序,这可能非常耗时。 对于嵌入项,此函数以递归方式运行,检查嵌入项是否包含可能过期的链接,并更新这些链接。 用户还可以使用“链接”对话框手动更新各个链接。
有关详细信息,请参阅 Windows SDK 中的 IOleLink::Update。
另请参阅
MFC 示例 MFCBIND
MFC 示例 OCLIENT
CDocItem 类
层次结构图
COleServerItem 类