メッセージ処理とコマンド ターゲット
コマンド ディスパッチ インターフェイス IOleCommandTarget はやすく、拡張可能な機能をコマンドを実行し、クエリ定義します。この機能は、コマンドの標準セットに完全に依存するため、オートメーション IDispatch より単純です。; コマンドにまれに引数がなく、型情報は複雑ではありません (タイプ セーフはコマンド ラインの引数にまたはデクリメントします)。
コマンド ディスパッチ インターフェイス デザインでは、各コマンドは自体 GUIDで識別されるコマンド グループ 「」に属するします。したがって、だれでも新しいグループを定義し、 Microsoft または他の他の販売元で調整する必要なしにそのグループ内のすべてのコマンドを定義できます。(これは、オートメーション dispIDs と dispinterface と基本的に同じ定義の基準です。このコマンド ルーティングの機能がオートメーション ハンドルとしてルーティング コマンドだけであり、/プログラマビリティ用スクリプトに大規模であるが、ここで重複があります)。
IOleCommandTarget は、次のシナリオを処理します:
オブジェクトが埋め込み先編集をアクティブにする場合、オブジェクトのツールバーだけが通常表示される、オブジェクトのツールバーが 印刷、 印刷プレビュー、 上書き保存(&&S),保存(&&S),上書き保存,保存,保存しますか、 New、 ズーム、などのコンテナー コマンドの一部のボタンを持つ場合があります。(埋め込み先編集の有効化の標準はオブジェクトを削除することツールバーから、ボタンを自らか、少なくとも無効にします。このデザインはこれらのコマンドが右のハンドラーを有効にするようにが生じた場合は、パスを指定できます。)現在、コンテナーにこれらのコマンドをディスパッチ オブジェクトの機能はありません。
アクティブ ドキュメントがアクティブ ドキュメント コンテナー (Office バインダーなど)埋め込まれている場合、コンテナーは、アクティブ ドキュメントにコマンドにこのような 印刷、 ページ(&&P),ページセットアップ、 プロパティなどを送信する必要がある場合があります。
この単純なコマンド ルーティングは既存のオートメーションの標準と IDispatchで処理できます。ただし、ここで必要であるため、 IOleCommandTarget は同じ目標を達成する簡単な方法を提供し、詳細 IDispatch とのオーバーヘッドのです:
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 値 (構造体)の配列を塗りつぶします。呼び出し元がコマンドを呼び出すときに戻る戻り値を取得するオプションと引数とともに Exec にコマンド (および設定 GUID)を渡すことができます。