IOleObjectImpl 类

此类实现 IUnknown 并且是容器与控件通信的主要接口。

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

template<class T>
class ATL_NO_VTABLE IOleObjectImpl : public IOleObject

参数

T
你的类,派生自 IOleObjectImpl

成员

公共方法

名称 描述
IOleObjectImpl::Advise 与控件建立咨询连接。
IOleObjectImpl::Close 将控件状态从运行更改为已加载。
IOleObjectImpl::DoVerb 指示控件执行其枚举的操作之一。
IOleObjectImpl::DoVerbDiscardUndo 指示控件放弃它正在维护的任何撤消状态。
IOleObjectImpl::DoVerbHide 指示控件从视图中删除其用户接口。
IOleObjectImpl::DoVerbInPlaceActivate 运行控件并安装其窗口,但不安装控件的用户界面。
IOleObjectImpl::DoVerbOpen 使控件在单独的窗口中打开编辑。
IOleObjectImpl::DoVerbPrimary 当用户双击控件时执行指定的操作。 控件定义了操作,通常是就地激活控件。
IOleObjectImpl::DoVerbShow 向用户显示新插入的控件。
IOleObjectImpl::DoVerbUIActivate 就地激活控件并显示控件的用户界面,例如菜单和工具栏。
IOleObjectImpl::EnumAdvise 枚举控件的咨询连接。
IOleObjectImpl::EnumVerbs 枚举控件的操作。
IOleObjectImpl::GetClientSite 检索控件的客户端站点。
IOleObjectImpl::GetClipboardData 从剪贴板检索数据。 ATL 实现返回 E_NOTIMPL。
IOleObjectImpl::GetExtent 检索控件显示区域的范围。
IOleObjectImpl::GetMiscStatus 检索控件的状态。
IOleObjectImpl::GetMoniker 检索控件的名字对象。 ATL 实现返回 E_NOTIMPL。
IOleObjectImpl::GetUserClassID 检索控件的类标识符。
IOleObjectImpl::GetUserType 检索控件的用户类型名称。
IOleObjectImpl::InitFromData 从选定的数据初始化控件。 ATL 实现返回 E_NOTIMPL。
IOleObjectImpl::IsUpToDate 检查控件是否是最新的。 ATL 实现返回 S_OK。
IOleObjectImpl::OnPostVerbDiscardUndo 在撤销状态被丢弃后由 DoVerbDiscardUndo 调用。
IOleObjectImpl::OnPostVerbHide 控件隐藏后由 DoVerbHide 调用。
IOleObjectImpl::OnPostVerbInPlaceActivate 控件激活后由 DoVerbInPlaceActivate 调用。
IOleObjectImpl::OnPostVerbOpen 在打开控件后由 DoVerbOpen 调用以在单独的窗口中进行编辑。
IOleObjectImpl::OnPostVerbShow 在控件设为可见后由 DoVerbShow 调用。
IOleObjectImpl::OnPostVerbUIActivate 在控件的用户界面被激活后由 DoVerbUIActivate 调用。
IOleObjectImpl::OnPreVerbDiscardUndo 在撤消状态被丢弃之前由 DoVerbDiscardUndo 调用。
IOleObjectImpl::OnPreVerbHide 在控件隐藏之前由 DoVerbHide 调用。
IOleObjectImpl::OnPreVerbInPlaceActivate 在控件就地激活之前由 DoVerbInPlaceActivate 调用。
IOleObjectImpl::OnPreVerbOpen 在打开控件前由 DoVerbOpen 调用以在单独的窗口中进行编辑。
IOleObjectImpl::OnPreVerbShow 在控件设为可见前由 DoVerbShow 调用。
IOleObjectImpl::OnPreVerbUIActivate 在控件的用户界面被激活前由 DoVerbUIActivate 调用。
IOleObjectImpl::SetClientSite 指示控件它在容器中的客户端站点。
IOleObjectImpl::SetColorScheme 向控件的应用程序推荐颜色方案(如果有)。 ATL 实现返回 E_NOTIMPL。
IOleObjectImpl::SetExtent 设置控件显示区域的范围。
IOleObjectImpl::SetHostNames 向控件告知容器应用程序和容器文档的名称。
IOleObjectImpl::SetMoniker 向控件告知其名字对象。 ATL 实现返回 E_NOTIMPL。
IOleObjectImpl::Unadvise 删除与控件的咨询连接。
IOleObjectImpl::Update 更新控件。 ATL 实现返回 S_OK。

注解

IOleObject 接口是容器与控件通信的主要接口。 类 IOleObjectImpl 提供此接口的默认实现,并通过在调试版本中将信息发送到转储设备来实现 IUnknown

相关文章ATL 教程创建 ATL 项目

继承层次结构

IOleObject

IOleObjectImpl

要求

标头:atlctl.h

IOleObjectImpl::Advise

与控件建立咨询连接。

STDMETHOD(Advise)(
    IAdviseSink* pAdvSink,
    DWORD* pdwConnection);

注解

请参阅 Windows SDK 中的 IOleObject::Advise

IOleObjectImpl::Close

将控件状态从运行更改为已加载。

STDMETHOD(Close)(DWORD dwSaveOption);

备注

停用控件并销毁控件窗口(如果存在)。 如果控件类数据成员 CComControlBase::m_bRequiresSave 为 TRUE,并且 dwSaveOption 参数为 OLECLOSE_SAVEIFDIRTY 或 OLECLOSE_PROMPTSAVE,则在关闭之前保存控件属性。

控制类数据成员 CComControlBase::m_spInPlaceSiteCComControlBase::m_spAdviseSink 中保存的指针被释放,数据成员 CComControlBase::m_bNegotiatedWndCComControlBase::m_bWndlessCComControlBase::m_bInPlaceSiteEx 设置为 FALSE。

请参阅 Windows SDK 中的 IOleObject::Close

IOleObjectImpl::DoVerb

指示控件执行其枚举的操作之一。

STDMETHOD(DoVerb)(
    LONG iVerb,
    LPMSG /* pMsg */,
    IOleClientSite* pActiveSite,
    LONG /* lindex */,
    HWND hwndParent,
    LPCRECT lprcPosRect);

备注

根据 iVerb 的值,ATL DoVerb 帮助程序函数之一的调用方式如下:

iVerb 值 调用 DoVerb 辅助函数
OLEIVERB_DISCARDUNDOSTATE DoVerbDiscardUndo
OLEIVERB_HIDE DoVerbHide
OLEIVERB_INPLACEACTIVATE DoVerbInPlaceActivate
OLEIVERB_OPEN DoVerbOpen
OLEIVERB_PRIMARY DoVerbPrimary
OLEIVERB_PROPERTIES CComControlBase::DoVerbProperties
OLEIVERB_SHOW DoVerbShow
OLEIVERB_UIACTIVATE DoVerbUIActivate

请参阅 Windows SDK 中的 IOleObject::DoVerb

IOleObjectImpl::DoVerbDiscardUndo

指示控件放弃它正在维护的任何撤消状态。

HRESULT DoVerbDiscardUndo(LPCRECT /* prcPosRect */, HWND /* hwndParent */);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。

返回值

返回 S_OK。

IOleObjectImpl::DoVerbHide

停用和删除控件的用户界面,并隐藏控件。

HRESULT DoVerbHide(LPCRECT /* prcPosRect */, HWND /* hwndParent */);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。 未在 ATL 实现中使用。

返回值

返回 S_OK。

IOleObjectImpl::DoVerbInPlaceActivate

运行控件并安装其窗口,但不安装控件的用户界面。

HRESULT DoVerbInPlaceActivate(LPCRECT prcPosRect, HWND /* hwndParent */);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。 未在 ATL 实现中使用。

返回值

标准 HRESULT 值之一。

注解

通过调用 CComControlBase::InPlaceActivate 激活控件。 除非控件类的数据成员 m_bWindowOnly 为 TRUE,否则 DoVerbInPlaceActivate 首先尝试将控件激活为无窗口控件(仅当容器支持 IOleInPlaceSiteWindowless 时才可能)。 如果失败,该函数将尝试激活具有扩展功能的控件(仅当容器支持 IOleInPlaceSiteEx 时才可能)。 如果失败,该函数将尝试激活没有扩展功能的控件(仅当容器支持 IOleInPlaceSite 时才可能)。 如果激活成功,该函数会通知容器控件已被激活。

IOleObjectImpl::DoVerbOpen

使控件在单独的窗口中打开编辑。

HRESULT DoVerbOpen(LPCRECT /* prcPosRect */, HWND /* hwndParent */);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。

返回值

返回 S_OK。

IOleObjectImpl::DoVerbPrimary

定义用户双击控件时采取的操作。

HRESULT DoVerbPrimary(LPCRECT prcPosRect, HWND hwndParent);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。

返回值

标准 HRESULT 值之一。

备注

默认情况下,设置为显示属性页。 你可以在你的控件类中替代此行为,以在双击时调用不同的行为;例如,播放视频或就地激活。

IOleObjectImpl::DoVerbShow

指示容器使控件可见。

HRESULT DoVerbShow(LPCRECT prcPosRect, HWND /* hwndParent */);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。 未在 ATL 实现中使用。

返回值

标准 HRESULT 值之一。

IOleObjectImpl::DoVerbUIActivate

激活控件的用户界面,并通知容器其菜单正在被复合菜单替换。

HRESULT DoVerbUIActivate(LPCRECT prcPosRect, HWND /* hwndParent */);

参数

prcPosRec
[in] 一个指针,指向容器希望控件绘制到的矩形。

hwndParent
[in] 包含控件的窗口句柄。 未在 ATL 实现中使用。

返回值

标准 HRESULT 值之一。

IOleObjectImpl::EnumAdvise

提供此控件的已注册咨询连接的枚举。

STDMETHOD(EnumAdvise)(IEnumSTATDATA** ppenumAdvise);

备注

请参阅 Windows SDK 中的 IOleObject::EnumAdvise

IOleObjectImpl::EnumVerbs

通过调用 OleRegEnumVerbs 为该控件提供已注册操作(动词)的枚举。

STDMETHOD(EnumVerbs)(IEnumOLEVERB** ppEnumOleVerb);

注解

你可以将动词添加到项目的 .rgs 文件中。 有关示例,请参阅 CIRC 示例中的 CIRCCTL.RGS。

请参阅 Windows SDK 中的 IOleObject::EnumVerbs

IOleObjectImpl::GetClientSite

将控件类数据成员 CComControlBase::m_spClientSite 中的指针放入 ppClientSite 并增加指针上的引用计数。

STDMETHOD(GetClientSite)(IOleClientSite** ppClientSite);

备注

请参阅 Windows SDK 中的 IOleObject::GetClientSite

IOleObjectImpl::GetClipboardData

从剪贴板检索数据。

STDMETHOD(GetClipboardData)(
    DWORD /* dwReserved */,
    IDataObject** /* ppDataObject */);

返回值

返回 E_NOTIMPL。

备注

请参阅 Windows SDK 中的 IOleObject::GetClipboardData

IOleObjectImpl::GetExtent

以 HIMETRIC 单位(每单位 0.01 毫米)检索运行控件的显示尺寸。

STDMETHOD(GetExtent)(
    DWORD dwDrawAspect,
    SIZEL* psizel);

备注

大小存储在控件类数据成员 CComControlBase::m_sizeExtent 中。

请参阅 Windows SDK 中的 IOleObject::GetExtent

IOleObjectImpl::GetMiscStatus

通过调用 OleRegGetMiscStatus 返回指向控件注册状态信息的指针。

STDMETHOD(GetMiscStatus)(
    DWORD dwAspect,
    DWORD* pdwStatus);

备注

状态信息包括控制和表示数据支持的行为。 你可以将状态信息添加到项目的 .rgs 文件中。

请参阅 Windows SDK 中的 IOleObject::GetMiscStatus

IOleObjectImpl::GetMoniker

检索控件的名字对象。

STDMETHOD(GetMoniker)(
    DWORD /* dwAssign */,
    DWORD /* dwWhichMoniker */,
    IMoniker** /* ppmk */);

返回值

返回 E_NOTIMPL。

注解

请参阅 Windows SDK 中的 IOleObject::GetMoniker

IOleObjectImpl::GetUserClassID

返回控件的类标识符。

STDMETHOD(GetUserClassID)(CLSID* pClsid);

注解

请参阅 Windows SDK 中的 IOleObject::GetUserClassID

IOleObjectImpl::GetUserType

通过调用 OleRegGetUserType 返回控件的用户类型名称。

STDMETHOD(GetUserType)(
    DWORD dwFormOfType,
    LPOLESTR* pszUserType);

备注

用户类型名称用于在菜单和对话框等用户界面元素中显示。 你可以在项目的 .rgs 文件中更改用户类型名称。

请参阅 Windows SDK 中的 IOleObject::GetUserType

IOleObjectImpl::InitFromData

从选定的数据初始化控件。

STDMETHOD(InitFromData)(
    IDataObject* /* pDataObject */,
    BOOL /* fCreation */,
    DWORD /* dwReserved */);

返回值

返回 E_NOTIMPL。

注解

请参阅 Windows SDK 中的 IOleObject::InitFromData

IOleObjectImpl::IsUpToDate

检查控件是否是最新的。

STDMETHOD(IsUpToDate)(void);

返回值

返回 S_OK。

备注

请参阅 Windows SDK 中的 IOleObject::IsUpToDate

IOleObjectImpl::OnPostVerbDiscardUndo

在撤销状态被丢弃后由 DoVerbDiscardUndo 调用。

HRESULT OnPostVerbDiscardUndo();

返回值

返回 S_OK。

备注

使用你希望在撤销状态被丢弃后执行的代码替代此方法。

IOleObjectImpl::OnPostVerbHide

控件隐藏后由 DoVerbHide 调用。

HRESULT OnPostVerbHide();

返回值

返回 S_OK。

备注

使用隐藏控件后要执行的代码替代此方法。

IOleObjectImpl::OnPostVerbInPlaceActivate

控件激活后由 DoVerbInPlaceActivate 调用。

HRESULT OnPostVerbInPlaceActivate();

返回值

返回 S_OK。

注解

使用控件激活后要执行的代码替代此方法。

IOleObjectImpl::OnPostVerbOpen

在打开控件后由 DoVerbOpen 调用以在单独的窗口中进行编辑。

HRESULT OnPostVerbOpen();

返回值

返回 S_OK。

备注

使用在打开控件后要执行的代码替代此方法(以在单独的窗口中进行编辑)。

IOleObjectImpl::OnPostVerbShow

在控件设为可见后由 DoVerbShow 调用。

HRESULT OnPostVerbShow();

返回值

返回 S_OK。

注解

使用你希望在控件可见后执行的代码替代此方法。

IOleObjectImpl::OnPostVerbUIActivate

在控件的用户界面被激活后由 DoVerbUIActivate 调用。

HRESULT OnPostVerbUIActivate();

返回值

返回 S_OK。

备注

使用你希望在控件的用户界面激活后执行的代码替代此方法。

IOleObjectImpl::OnPreVerbDiscardUndo

在撤消状态被丢弃之前由 DoVerbDiscardUndo 调用。

HRESULT OnPreVerbDiscardUndo();

返回值

返回 S_OK。

备注

要防止撤消状态被丢弃,请替代此方法以返回错误 HRESULT。

IOleObjectImpl::OnPreVerbHide

在控件隐藏之前由 DoVerbHide 调用。

HRESULT OnPreVerbHide();

返回值

返回 S_OK。

备注

若要防止控件被隐藏,请替代此方法以返回错误 HRESULT。

IOleObjectImpl::OnPreVerbInPlaceActivate

在控件就地激活之前由 DoVerbInPlaceActivate 调用。

HRESULT OnPreVerbInPlaceActivate();

返回值

返回 S_OK。

注解

若要防止控件被激活,请替代此方法以返回错误 HRESULT。

IOleObjectImpl::OnPreVerbOpen

在打开控件前由 DoVerbOpen 调用以在单独的窗口中进行编辑。

HRESULT OnPreVerbOpen();

返回值

返回 S_OK。

注解

若要防止在单独的窗口中打开控件进行编辑,请替代此方法以返回错误 HRESULT。

IOleObjectImpl::OnPreVerbShow

在控件设为可见前由 DoVerbShow 调用。

HRESULT OnPreVerbShow();

返回值

返回 S_OK。

备注

若要防止控件可见,请替代此方法以返回错误 HRESULT。

IOleObjectImpl::OnPreVerbUIActivate

在控件的用户界面被激活前由 DoVerbUIActivate 调用。

HRESULT OnPreVerbUIActivate();

返回值

返回 S_OK。

注解

若要防止控件的用户界面被激活,请替代此方法以返回错误 HRESULT。

IOleObjectImpl::SetClientSite

指示控件它在容器中的客户端站点。

STDMETHOD(SetClientSite)(IOleClientSite* pClientSite);

备注

然后该方法返回 S_OK。

请参阅 Windows SDK 中的 IOleObject::SetClientSite

IOleObjectImpl::SetColorScheme

向控件的应用程序推荐颜色方案(如果有)。

STDMETHOD(SetColorScheme)(LOGPALETTE* /* pLogPal */);

返回值

返回 E_NOTIMPL。

备注

请参阅 Windows SDK 中的 IOleObject::SetColorScheme

IOleObjectImpl::SetExtent

设置控件显示区域的范围。

STDMETHOD(SetExtent)(
    DWORD dwDrawAspect,
    SIZEL* psizel);

备注

否则,SetExtentpsizel 指向的值存储在控件类数据成员 CComControlBase::m_sizeExtent 中。 该值以 HIMETRIC 为单位(每单位 0.01 毫米)。

如果控件类数据成员 CComControlBase::m_bResizeNatural 为 TRUE,则 SetExtent 还会将 psizel指向的值存储在控件类数据成员 CComControlBase::m_sizeNatural 中。

如果控件类数据成员 CComControlBase::m_bRecomposeOnResize 为 TRUE,则 SetExtent 调用 SendOnDataChangeSendOnViewChange,以向注册到建议持有者的所有咨询接收器发出以下通知:控件大小已更改。

请参阅 Windows SDK 中的 IOleObject::SetExtent

IOleObjectImpl::SetHostNames

向控件告知容器应用程序和容器文档的名称。

STDMETHOD(SetHostNames)(LPCOLESTR /* szContainerApp */, LPCOLESTR /* szContainerObj */);

返回值

返回 S_OK。

备注

请参阅 Windows SDK 中的 IOleObject::SetHostNames

IOleObjectImpl::SetMoniker

向控件告知其名字对象。

STDMETHOD(SetMoniker)(
    DWORD /* dwWhichMoniker */,
    IMoniker** /* pmk */);

返回值

返回 E_NOTIMPL。

备注

请参阅 Windows SDK 中的 IOleObject::SetMoniker

IOleObjectImpl::Unadvise

删除存储在控件类的 m_spOleAdviseHolder 数据成员中的咨询连接。

STDMETHOD(Unadvise)(DWORD dwConnection);

备注

请参阅 Windows SDK 中的 IOleObject::Unadvise

IOleObjectImpl::Update

更新控件。

STDMETHOD(Update)(void);

返回值

返回 S_OK。

注解

请参阅 Windows SDK 中的 IOleObject::Update

另请参阅

CComControl 类
ActiveX 控件接口
类概述