次の方法で共有


メニューのマージ

オブジェクトがコンテナー内でアクティブな場合、 OLE ドキュメントのメニューのマージのプロトコルは ヘルプ のメニューのオブジェクトの完全に制御できます。その結果、コンテナーのヘルプ トピックは、ユーザーがオブジェクトを非アクティブ化は使用できません。アクティブ ドキュメント コンテインメントのアーキテクチャは、埋め込み先編集のメニューのマージに関する規則でコンテナーと、メニューを共有するためにアクティブであるアクティブ ドキュメントの両方を許可する配置します。新しい規則は共有メニューがどのように構築されるか、メニューの一部、またはコンポーネントが所有するかに関するさらに追加規則です。

新しい規則は簡単です。アクティブ ドキュメントに次のように ヘルプ のメニューに編成される 2 種類のトップレベルのメニュー項目があります:

Help

Container Help >

Object Help >

たとえば、 Word セクションが Office バインダーでアクティブである場合、次のように、 ヘルプ のメニューが表示されます:

Help

Binder Help >

Word Help >

メニュー項目は両方とも、コンテナーおよびオブジェクトに固有の追加のメニュー項目は、ユーザーに提供されるカスケード メニューです。どの項目がここに表示されるか含まれるコンテナーおよびオブジェクトによって異なります。

ヘルプ のこのマージされたメニューを構築するには、アクティブ ドキュメント コンテインメントのアーキテクチャは、 OLE ドキュメント プロシージャを変更します。OLE ドキュメントに従って、マージされたメニュー バー、メニュー、二つ ファイル編集コンテナー、 Object、 ウィンドウ(&&W),ウィンドウ、その順序で ヘルプの 6 グループを持つことができます。各グループでは、ゼロこともできます。詳細にあるメニュー。グループ ファイルコンテナーウィンドウ(&&W),ウィンドウ は、コンテナーに属し、グループ 編集Object,ヘルプ はオブジェクトに属しています。オブジェクトは、メニューのマージを行う場合、空のメニュー バーを作成し、コンテナーに渡します。コンテナーは IOleInPlaceFrame::InsertMenusを呼び出すことで、メニューを挿入します。オブジェクトは、 6 種類の長い値 (OLEMENUGROUPWIDTHS)の配列である構造体を渡します。メニューを挿入すると、コンテナーは次に、メニューがグループのすべてに追加し、戻りかを示します。その後、オブジェクトは各コンテナーのグループでメニューの数に注意を払うメニューを挿入します。最後に、オブジェクトは非透過 「メニュー」記述子のハンドルを返す OLE にマージされたメニュー バー、および (各グループでメニューの数を含む)配列渡します。コンテナーとマージされたメニュー バー IOleInPlaceFrame::SetMenu処理した後でオブジェクトのパス。この時点で、コンテナーは OLE がメニュー メッセージの適切なディスパッチを変更できるように、マージされたメニュー バーが表示されている場合は、 OLE のハンドルを渡します。

変更されたアクティブ ドキュメント手順では、オブジェクトはゼロにコンテナーに渡す前に最初に OLEMENUGROUPWIDTHS の要素を初期化する必要があります。、コンテナーは 1 種類の例外を除き、通常のメニューの挿入を実行します: コンテナーは ヘルプ のメニューを同時に最後の項目を挿入し、オブジェクトのグループに属する) OLEMENUGROUPWIDTHS の配列 (つまり、幅 [5] の最後の 6 番目のエントリ ()では、 1 の値を格納します。ヘルプ でこのメニューにサブメニューである 1 項目のみ、前に説明したように 「Container Help >」のカスケードのメニューあります。

オブジェクトは、通常のメニューの挿入コードを実行します。ただし、 ヘルプ のメニューを挿入する前に、 OLEMENUGROUPWIDTHS 配列の 6 番目のエントリをチェックします。値が 1 で、最後のメニューの名前が ヘルプ (または適切なローカライズされた文字列)の場合、オブジェクトはコンテナーの ヘルプ のメニューのサブメニューとして ヘルプ のメニューを挿入します。

オブジェクトは、 OLEMENUGROUPWIDTHS の 6 番目の要素をゼロに設定し、 1 に、 5 番目の要素をインクリメントします。これは、 OLE に ヘルプ のメニューがコンテナーに属し、そのメニュー (サブメニュー)に対応するメニュー メッセージがコンテナーにパスを指定する必要があることを通知します。のは、 WM_INITMENUPOPUPを、 WM_SELECTコピーする、コンテナーの役割 WM_COMMANDおよびオブジェクトの ヘルプ のメニューの部分に属する別のメニューに関連するメッセージです。これは、コンテナーを示すフラグをクリアするために WM_INITMENU を使用してユーザーはオブジェクトの ヘルプ のメニューに移動したかどうかを行います。コンテナーは、エントリにまたはコンテナー自体が追加されていない ヘルプ のメニューのすべての項目から終了については、 WM_MENUSELECT が表示されます。エントリでは、ユーザーがオブジェクトのメニューに移動するため、コンテナー オブジェクトのヘルプが 「メニュー」にフラグを設定し、オブジェクト ペインに、最小限のように、 WM_MENUSELECTWM_INITMENUPOPUPWM_COMMAND のメッセージを転送するために、フラグの状態を使用することを意味します。(終了に、コンテナーはフラグ解除し、これらの同じメッセージを自体を処理します)。コンテナーはこれらのメッセージに対して先としてオブジェクトの IOleInPlaceActiveObejct::GetWindow の関数から返されるウィンドウを使用する必要があります。

オブジェクトが OLEMENUGROUPWIDTHSの 6 番目の要素の数を検出すると、正常な OLE ドキュメントの規則に従って進みます。この手順は ヘルプ のメニューのマージに含める、コンテナーをコンテナーについて説明します。

オブジェクトが表示される前に IOleInPlaceFrame::SetMenuをダイヤルすると、コンテナーが挿入したソースに加えて ヘルプ のメニューに追加サブメニューがあるかどうか、マージされたメニュー バー、コンテナーはチェックします。その場合、コンテナーはマージされたメニュー バーに ヘルプ のメニューを保持します。ヘルプ のメニューに追加サブメニューがない場合、コンテナーはマージされたメニュー バーの ヘルプ のメニューを削除します。この手順は ヘルプ のメニューのマージに参加する、またはオブジェクトをオブジェクトについて説明します。

最後に、メニューを逆アセンブル時の場合、オブジェクトは他の挿入されたメニューの削除に加えて ヘルプ の挿入されたメニューを削除します。コンテナーはメニューを削除すると、挿入した別のメニューに加えて ヘルプ のメニューを削除します。

参照

概念

Active ドキュメント コンテナー