IOleObjectImpl 类
此类实现 IUnknown
并且是容器与控件通信的主要接口。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
template<class T>
class ATL_NO_VTABLE IOleObjectImpl : public IOleObject
参数
T
你的类,派生自 IOleObjectImpl
。
成员
公共方法
注解
IOleObject 接口是容器与控件通信的主要接口。 类 IOleObjectImpl
提供此接口的默认实现,并通过在调试版本中将信息发送到转储设备来实现 IUnknown
。
继承层次结构
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_spInPlaceSite 和 CComControlBase::m_spAdviseSink 中保存的指针被释放,数据成员 CComControlBase::m_bNegotiatedWnd、CComControlBase::m_bWndless 和 CComControlBase::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);
备注
否则,SetExtent
将 psizel
指向的值存储在控件类数据成员 CComControlBase::m_sizeExtent 中。 该值以 HIMETRIC 为单位(每单位 0.01 毫米)。
如果控件类数据成员 CComControlBase::m_bResizeNatural 为 TRUE,则 SetExtent
还会将 psizel
指向的值存储在控件类数据成员 CComControlBase::m_sizeNatural 中。
如果控件类数据成员 CComControlBase::m_bRecomposeOnResize 为 TRUE,则 SetExtent
调用 SendOnDataChange
和 SendOnViewChange
,以向注册到建议持有者的所有咨询接收器发出以下通知:控件大小已更改。
请参阅 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。