IOleObjectImpl 類別
這個類別會實作 IUnknown
,並且是容器與控件通訊的主體介面。
重要
這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。
語法
template<class T>
class ATL_NO_VTABLE IOleObjectImpl : public IOleObject
參數
T
您的類別衍生自 IOleObjectImpl
。
成員
公用方法
備註
IOleObject 介面是容器與控件通訊的主體介面。 類別 IOleObjectImpl
提供這個介面的預設實作,並藉由將資訊傳送至偵錯組建中的傾印裝置來實 IUnknown
作。
繼承階層架構
IOleObject
IOleObjectImpl
需求
標頭: atlctl.h
IOleObjectImpl::建議
建立與控件的諮詢連線。
STDMETHOD(Advise)(
IAdviseSink* pAdvSink,
DWORD* pdwConnection);
備註
請參閱 Windows SDK 中的 IOleObject::建議 。
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::D oVerb
告知控件執行其其中一個列舉動作。
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::D oVerbProperties |
OLEIVERB_SHOW | DoVerbShow |
OLEIVERB_UIACTIVATE | DoVerbUIActivate |
請參閱 Windows SDK 中的 IOleObject::D oVerb 。
IOleObjectImpl::D oVerbDiscardUndo
告知控件捨棄它所維護的任何復原狀態。
HRESULT DoVerbDiscardUndo(LPCRECT /* prcPosRect */, HWND /* hwndParent */);
參數
prcPosRec
[in]容器希望控件繪製成的矩形指標。
hwndParent
[in]包含控件之視窗的句柄。
傳回值
傳回S_OK。
IOleObjectImpl::D oVerbHide
停用並移除控制件的使用者介面,並隱藏控制件。
HRESULT DoVerbHide(LPCRECT /* prcPosRect */, HWND /* hwndParent */);
參數
prcPosRec
[in]容器希望控件繪製成的矩形指標。
hwndParent
[in]包含控件之視窗的句柄。 ATL 實作中未使用。
傳回值
傳回S_OK。
IOleObjectImpl::D oVerbInPlaceActivate
執行控制項並安裝其視窗,但不會安裝控制件的使用者介面。
HRESULT DoVerbInPlaceActivate(LPCRECT prcPosRect, HWND /* hwndParent */);
參數
prcPosRec
[in]容器希望控件繪製成的矩形指標。
hwndParent
[in]包含控件之視窗的句柄。 ATL 實作中未使用。
傳回值
其中一個標準 HRESULT 值。
備註
呼叫 CComControlBase::InPlaceActivate 來啟動控件。 除非控件類別的數據成員 m_bWindowOnly
為 TRUE, DoVerbInPlaceActivate
否則會先嘗試將控件啟動為無視窗控件(只有在容器支援 IOleInPlaceSiteWindowless 時才可能)。 如果失敗,函式會嘗試啟用具有擴充功能的控件(只有在容器支援 IOleInPlaceSiteEx 時才可能)。 如果失敗,函式會嘗試啟用沒有擴充功能的控件(只有在容器支援 IOleInPlaceSite 時才可能)。 如果啟用成功,函式會通知容器控件已啟用。
IOleObjectImpl::D oVerbOpen
使控件在個別視窗中開啟-編輯。
HRESULT DoVerbOpen(LPCRECT /* prcPosRect */, HWND /* hwndParent */);
參數
prcPosRec
[in]容器希望控件繪製成的矩形指標。
hwndParent
[in]包含控件之視窗的句柄。
傳回值
傳回S_OK。
IOleObjectImpl::D oVerbPrimary
定義使用者按兩下控制件時所採取的動作。
HRESULT DoVerbPrimary(LPCRECT prcPosRect, HWND hwndParent);
參數
prcPosRec
[in]容器希望控件繪製成的矩形指標。
hwndParent
[in]包含控件之視窗的句柄。
傳回值
其中一個標準 HRESULT 值。
備註
根據預設,設定為顯示屬性頁。 您可以在控件類別中覆寫此專案,以在按兩下時叫用不同的行為;例如,播放影片或就地使用中。
IOleObjectImpl::D oVerbShow
告知容器讓控件可見。
HRESULT DoVerbShow(LPCRECT prcPosRect, HWND /* hwndParent */);
參數
prcPosRec
[in]容器希望控件繪製成的矩形指標。
hwndParent
[in]包含控件之視窗的句柄。 ATL 實作中未使用。
傳回值
其中一個標準 HRESULT 值。
IOleObjectImpl::D oVerbUIActivate
啟動控制元件的使用者介面,並通知容器其功能表正由複合功能表取代。
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 檔案。 例如,請參閱 CIRCCTL。CIRC 範例中的 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
擷取控件的Moniker。
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
告知控件其Moniker是什麼。
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 。