共用方式為


訊息處理和命令目標

命令分派介面IOleCommandTarget定義簡單且可延伸的機制來查詢和執行命令。這項機制是自動化的時間比IDispatch因為它完全依賴一組標準的命令的方式。 命令很少會有引數,以及是否涉及任何類型的資訊 (型別安全會降低的命令引數)。

在命令分派介面設計中,每個命令都屬於 「 命令群組 」,其本身以識別 GUID。因此,任何人都可以定義新的群組,並不需要以協調向 Microsoft 或其他任何廠商的情況下該群組內的所有命令。(這是實質上相同的方式為定義的分配介面 加上 Dispid 在自動化。有是重疊,雖然路由機制,此指令只適用於命令傳送,不能用於指令碼/程式設計在大規模 Automation 控制代碼)。

IOleCommandTarget處理下列案例:

  • 當物件是就地啟動時,只顯示物件的工具列通常會出現,當物件的工具列可能有一些容器命令類似的按鈕時列印列印預覽儲存, New, ,和其他人。(資料物件移除就地啟動標準中建議從他們的工具列,或在這種按鈕至少停用。可以這種設計讓這些命令可以啟用,而且傳送到正確的處理常式)。目前,沒有機制讓這些命令分派給容器的物件。

  • 當主動式文件內嵌於主動式文件容器 (例如 Office 文件夾) 時,容器可能需要將命令傳送這類列印頁面安裝屬性,並讓其他人所包含的主動式文件。

無法處理這個簡單的命令傳送到現有的自動化標準和IDispatch。不過,額外負荷涉及的IDispatch就很不是必要的所以IOleCommandTarget提供簡單的方式來達成相同目的:

interface IOleCommandTarget : IUnknown

{

HRESULT QueryStatus(

[in] GUID *pguidCmdGroup,

[in] ULONG cCmds,

[in,out][size_is(cCmds)] OLECMD *prgCmds,

[in,out] OLECMDTEXT *pCmdText);

HRESULT Exec(

[in] GUID *pguidCmdGroup,

[in] DWORD nCmdID,

[in] DWORD nCmdExecOpt,

[in] VARIANTARG *pvaIn,

[in,out] VARIANTARG *pvaOut);

}

QueryStatus在此方法會測試是否一組特定的命令,將它識別與 GUID,並支援。這個呼叫將填入陣列來填入 OLECMD 值 (結構) 支援的命令,以及傳回文字,描述資訊的命令和 (或) 狀態的名稱清單。當呼叫端想要叫用命令時,它可以傳遞的命令 (與設定的 GUID) 至 Exec 與選項和引數,以及取回傳回值。

請參閱

概念

主動式文件容器