共用方式為


IOleObject::D oVerb 方法 (oleidl.h)

要求物件執行動作,以回應使用者的動作。 IOleObject::EnumVerbs 中物件的可能動作會列舉。

語法

HRESULT DoVerb(
  [in] LONG           iVerb,
  [in] LPMSG          lpmsg,
  [in] IOleClientSite *pActiveSite,
  [in] LONG           lindex,
  [in] HWND           hwndParent,
  [in] LPCRECT        lprcPosRect
);

參數

[in] iVerb

指派給 IOleObject::EnumVerbs 所傳回之 OLEVERB 結構中動詞的數位。

[in] lpmsg

MSG 結構的指標,描述事件 (,例如叫用動詞的按兩下) 。 呼叫端應該傳遞未修改的 MSG 結構,而不嘗試解譯或改變任何結構成員的值。

[in] pActiveSite

物件作用中用戶端網站上的 IOleClientSite 介面指標,其中發生叫用動詞的事件。

[in] lindex

此參數是保留的,而且必須是零。

[in] hwndParent

文件視窗的控制代碼,包含物件。 這個 和 lprcPosRect 可以開啟物件的暫存視窗,其中 hwndParent 是要顯示物件的視窗的父視窗, 而 lprcPosRect 會定義可用於顯示該父代內對象視窗的區域。 例如,暫存視窗對於開啟本身進行播放但無法進行編輯的多媒體物件很有用。

[in] lprcPosRect

包含座標之 RECT 結構的指標,以像素為單位,定義 物件在 hwndParent 中的周框矩形。 這和 hwndParent 一起啟用開啟多媒體物件以進行播放,但無法進行編輯。

傳回值

此方法會在成功時傳回S_OK。 其他可能的傳回值包括下列專案。

傳回碼 Description
OLE_E_NOT_INPLACEACTIVE
iVerb 設定為 OLEIVERB_UIACTIVATE 或 OLEIVERB_INPLACEACTIVATE,且物件尚未顯示。
OLE_E_CANT_BINDTOSOURCE
對象處理程式或連結物件無法連線到連結來源。
DV_E_LINDEX
無效的 lindex。
OLEOBJ_S_CANNOT_DOVERB_NOW
動詞是有效的,但在物件的目前狀態中,它無法執行對應的動作。
OLEOBJ_S_INVALIDHWND
DoVerb 成功,但 hwndParent 無效。
OLEOBJ_E_NOVERBS
物件不支援任何動詞。
OLEOBJ_S_INVALIDVERB
連結來源是透過未連線到此電腦上磁碟驅動器的網路。
MK_E_CONNECT
連結來源是透過未連線到此電腦上磁碟驅動器的網路。
OLE_E_CLASSDIFF
連結來源的類別已經過轉換。
E_NOTIMPL
物件不支援就地啟用,或無法辨識負動詞號。

備註

「動詞」是 OLE 物件在其容器回應訊息時所採取的動作。 物件的容器或連結至物件的用戶端通常會呼叫 IOleObject::D oVerb 以回應某些使用者動作,例如按兩下物件。 指定物件可用的各種動作會列舉在 OLEVERB 結構中,容器會藉由呼叫 IOleObject::EnumVerbs 來取得此結構。 IOleObject::D oVerb 會比對結構的 iVerb 成員的值,以判斷要叫用的動詞。

透過 IOleObject::EnumVerbs,物件而非其容器,決定 (的動詞 (,也就是) 所支援的動作。 OLE 2 會定義所有物件可用的七個動詞,但不一定很有用。 此外,每個物件都可以定義它唯一的其他動詞。 下表描述 OLE 所定義的動詞。

動詞命令 描述
OLEIVERB_PRIMARY (0L) 指定當使用者按兩下其容器中的物件時所發生的動作。 物件,而非容器會決定此動作。 如果物件支援就地啟用,主要動詞通常會就地啟動物件。
OLEIVERB_SHOW (-1) 指示物件自行顯示編輯或檢視。 呼叫 以顯示新插入的物件以進行初始編輯,並顯示連結來源。 通常是一些其他物件定義動詞的別名。
OLEIVERB_OPEN (-2) 指示物件,包括另一個支援就地啟用的物件,以在與其容器不同的窗口中開啟本身進行編輯。 如果物件不支援就地啟用,這個動詞的語意與OLEIVERB_SHOW相同。
OLEIVERB_HIDE (-3) 使物件從檢視中移除其使用者介面。 僅適用於就地啟動的物件。
OLEIVERB_UIACTIVATE (-4) 就地啟動 物件,以及其完整的使用者介面工具集,包括功能表、工具列,以及容器視窗標題列中的名稱。 如果物件不支援就地啟用,它應該會傳回E_NOTIMPL。
OLEIVERB_INPLACEACTIVATE (-5) 啟用物件就地,而不顯示功能表和工具列等工具,用戶必須變更對象的行為或外觀。 單鍵這類物件會導致它與其容器交涉其使用者介面工具的顯示。 如果容器拒絕,物件會保持作用中,但未顯示其工具。
OLEIVERB_DISCARDUNDOSTATE (-6) 用來告訴物件捨棄任何復原狀態,使其可能維持,而不停用物件。
 

來電者的附註

容器會呼叫 IOleObject::D oVerb 作為初始化新建立物件的一部分。 進行呼叫之前,容器應該先呼叫 IOleObject::SetClientSite ,通知對象其顯示位置, 並通知 IOleObject::SetHostNames 警示物件是內嵌物件,並觸發對象應用程式使用者介面的適當變更,以準備開啟編輯視窗。

IOleObject::D oVerb 會自動執行 OLE 伺服器應用程式。 如果在動詞執行期間發生錯誤,則會關閉物件應用程式。

如果使用者透過一些方式叫用動詞,而不是從功能表選取命令, (說,按兩下或更罕見地單擊物件) ,物件的容器應該會將指標傳遞至包含適當訊息的 Windows MSG 結構。 例如,如果使用者按兩下 物件來叫用動詞,容器應該傳遞包含WM_LBUTTONDBLCLK、WM_MBUTTONDBLCLK或WM_RBUTTONDBLCLK的 MSG 結構。 如果容器未傳遞任何訊息,則 lpmsg 應設定為 NULL。 對象應該忽略傳遞之 MSG 結構的 hwnd 成員,但可以使用所有其他 MSG 成員。

如果物件的內嵌容器呼叫 IOleObject::D oVerb,則用戶端網站指標 (pClientSite) 傳遞至 IOleObject::D oVerb 與內嵌網站的指標相同。 如果內嵌對像是連結來源,則傳遞至 IOleObject::D oVerb 的指標是鏈接用戶端網站的指標。

在 OLE 連結上叫用 IOleObject::D oVerb 時,可能會傳回OLE_E_CLASSDIFF或MK_CONNECTMANUALLY。 鏈接物件會在連結來源處於被動狀態時,傳回先前的錯誤。 當連結來源位於目前未連線到呼叫端電腦的網路驅動器機時,鏈接物件會傳回後者的錯誤。 在這些情況下連接連結的唯一方法是先呼叫 IUnknown::QueryInterface、要求 IOleLink、配置系結內容,以及呼叫 IOleLink::BindToSource 來執行連結來源。

不支援一般就地啟用的容器應用程式仍然可以使用 hwndParentlprcPosRect 參數來支援就地播放多媒體檔案。 容器必須將有效的 hwndParentlprcPosRect 參數傳遞至 IOleObject::D oVerb

某些程式代碼範例會傳遞 -1 的 lindex 值,而不是零。 值 -1 可運作,但應避免使用零。 lindex 參數是保留參數,基於一致性的原因,Microsoft 建議將零值指派給所有保留參數。

實作者的注意事項

除了上述動詞之外,物件還可以在其 OLEVERB 結構中定義本身特有的其他動詞。 正數會指定這些物件特定的動詞。 對象應該會將任何未知的正動詞號視為主要動詞,並將OLEOBJ_S_INVALIDVERB傳回給呼叫函式。 對象應該忽略其無法辨識並傳回E_NOTIMPL負數的動詞。

如果執行中的動詞命令會將物件置於執行中狀態,則即使執行中的物件應用程式不支持連結,您也應該在執行中的對象數據表中註冊物件, (ROT) 。 註冊很重要,因為某個時間點的對象可作為支援內嵌連結之容器中連結的來源。 向 ROT 註冊物件可讓連結用戶端直接取得物件的指標,而不需要通過物件的容器。 若要執行註冊,請呼叫 IOleClientSite::GetMoniker 以取得物件的完整 Moniker、呼叫 GetRunningObjectTable 函式以取得 ROT 的指標,然後呼叫 IRunningObjectTable::Register

注意 當對象離開執行中狀態時,請記得藉由呼叫 IOleObject::Close 來撤銷與 ROT 的註冊。 如果在物件執行時重新命名物件的容器檔,您應該撤銷對象的註冊,並使用其新名稱向 ROT 重新註冊它。 容器應該藉由呼叫 IOleObject::SetMoniker 或回應物件的呼叫 IOleClientSite::GetMoniker,通知物件其新 Moniker。
 
當以 IOleObject::D oVerb 的結果顯示視窗時,對象在編輯視窗中明確呼叫 SetForegroundWindow 非常重要。 這可確保即使另一個程式原本遮蔽物件視窗,用戶還是可以看到該視窗。 如需詳細資訊,請參閱 SetForegroundWindowSetActiveWindow

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 oleidl.h

另請參閱

GetRunningObjectTable

IOleClientSite::GetMoniker

IOleLink::BindToSource

IOleObject

IOleObject::Close

IOleObject::EnumVerbs

IOleObject::GetMoniker

IOleObject::SetMoniker

IRunningObjectTable::Register

OleRun