共用方式為


IOleObjectImpl 類別

這個類別會實作 IUnknown ,並且是容器與控件通訊的主體介面。

重要

這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。

語法

template<class T>
class ATL_NO_VTABLE IOleObjectImpl : public IOleObject

參數

T
您的類別衍生自 IOleObjectImpl

成員

公用方法

名稱 描述
IOleObjectImpl::建議 建立與控件的諮詢連線。
IOleObjectImpl::Close 將控件狀態從執行變更為已載入。
IOleObjectImpl::D oVerb 告知控件執行其其中一個列舉動作。
IOleObjectImpl::D oVerbDiscardUndo 告知控件捨棄它所維護的任何復原狀態。
IOleObjectImpl::D oVerbHide 告知控件從檢視中移除其使用者介面。
IOleObjectImpl::D oVerbInPlaceActivate 執行控制項並安裝其視窗,但不會安裝控制件的使用者介面。
IOleObjectImpl::D oVerbOpen 使控件在個別視窗中開啟-編輯。
IOleObjectImpl::D oVerbPrimary 當使用者按兩下 控制項時,執行指定的動作。 控件會定義動作,通常是為了就地啟動控制項。
IOleObjectImpl::D oVerbShow 向用戶顯示新插入的控制件。
IOleObjectImpl::D oVerbUIActivate 就地啟動控制項,並顯示控件的使用者介面,例如功能表和工具列。
IOleObjectImpl::EnumAdvise 列舉控件的諮詢連線。
IOleObjectImpl::EnumVerbs 列舉 控件的動作。
IOleObjectImpl::GetClientSite 擷取控件的客戶端網站。
IOleObjectImpl::GetClipboardData 從剪貼簿擷取數據。 ATL 實作會傳回E_NOTIMPL。
IOleObjectImpl::GetExtent 擷取控件顯示區域的範圍。
IOleObjectImpl::GetMiscStatus 擷取控件的狀態。
IOleObjectImpl::GetMoniker 擷取控件的Moniker。 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 告知控件其Moniker是什麼。 ATL 實作會傳回E_NOTIMPL。
IOleObjectImpl::Unadvise 刪除與控件的諮詢連線。
IOleObjectImpl::Update 更新控制項。 ATL 實作會傳回S_OK。

備註

IOleObject 介面是容器與控件通訊的主體介面。 類別 IOleObjectImpl 提供這個介面的預設實作,並藉由將資訊傳送至偵錯組建中的傾印裝置來實 IUnknown 作。

相關文章 ATL 教學課程建立 ATL 專案

繼承階層架構

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_bNegotiatedWndCComControlBase::m_bWndlessCComControlBase::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_spClientSiteppClientSite 中,並遞增指標上的參考計數。

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 則呼叫 SendOnDataChangeSendOnViewChange 通知向建議持有者註冊的所有諮詢接收,指出控件大小已變更。

請參閱 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

另請參閱

CComControl 類別
ActiveX 控制件介面
類別概觀