[ヘルプ] メニューのマージ
オブジェクトをコンテナー内でアクティブなとき、OLE ドキュメントのメニューのマージのプロトコルは ヘルプ メニュー オブジェクトの全体を示します。 その結果、コンテナーのヘルプ トピックでは、ユーザーがオブジェクトを非アクティブにする必要はありません。 Active ドキュメント コンテインメントのアーキテクチャはコンテナーとメニューを共有するとアクティブであるアクティブ ドキュメントの両方を許可するようにマージする埋め込み先編集用メニューの規則に展開します。 新しい規則が共有メニューがどのように構築されているかをメニューの部分、またはどのコンポーネントが所有するかについて、単に追加規則です。
新しい規則は簡単です。 アクティブ ドキュメントに次のように ヘルプ メニューに編成される 2 種類のトップレベル メニュー項目があります:
Help
Container Help >
Object Help >
たとえば、Word セクションが Office バインダーにアクティブになると、次のよう ヘルプ メニューと表示:
Help
Binder Help >
Word Help >
メニュー項目は両方のコンテナーとオブジェクトに固有の追加のメニュー項目は、ユーザーに提供されるカスケード メニューです。 どの項目がここに表示またはインクルード コンテナーとオブジェクトによって異なります。
この ヘルプ マージされたメニューを構築するために、Active ドキュメント コンテインメントのアーキテクチャは、OLE ドキュメント プロシージャを変更します。 OLE ドキュメントに従って、マージされたメニュー バー、メニュー、つまり ファイル、編集、コンテナー、Object、[ウィンドウ]、その順序で ヘルプの 6 グループを持つことができます。 各グループで、ゼロこともは、メニュー。 グループ ファイル、コンテナーと [ウィンドウ] はコンテナーに属し、グループ 編集、オブジェクト, と ヘルプ はオブジェクトに属します。 オブジェクトは、メニューのマージを行う場合は、空のメニュー バーを作成し、コンテナーに渡します。 コンテナーは IOleInPlaceFrame::InsertMenusを呼び出すことにより、メニューを挿入します。 オブジェクトは、6 個の Long 型の値 (OLEMENUGROUPWIDTHS) の配列である構造体を渡します。 メニューを挿入すると、コンテナーは次に行われるメニューをグループの一覧に追加し、戻りかを示します。 このオブジェクトは、各コンテナー グループのメニューの数に注意を払うメニューを挿入します。 最後に、オブジェクトは非透過「メニュー」記述子のハンドルを返す OLE にマージされたメニュー バー、および (各グループにメニューの数を含む配列) を渡します。 コンテナーとマージされたメニュー バー処理する IOleInPlaceFrame::SetMenuして後でオブジェクトを渡します。 この時点で、コンテナーは OLE メニュー メッセージの適切なディスパッチをできるように、マージされたメニュー バーの表示、または OLE にハンドルを渡します。
変更された Active ドキュメント プロシージャでは、オブジェクトはゼロにコンテナーに渡す前に OLEMENUGROUPWIDTHS 要素を初期化しなければなりません。 、コンテナーは 1 点を除き、通常の挿入メニューを実行して T: コンテナーは ヘルプ メニューと同時に最後の項目を挿入し、オブジェクトのグループに属する 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_MENUSELECT、WM_INITMENUPOPUPと WM_COMMAND メッセージを転送するために、このフラグの状態を使用することを意味します。(終了時に、コンテナーはフラグ削除し、これらの同じメッセージを自体を処理します)。コンテナーは、これらのメッセージの出力先としてオブジェクト IOleInPlaceActiveObejct::GetWindow 関数から返されるウィンドウを使用します。
オブジェクトが OLEMENUGROUPWIDTHSの 6 番目の要素の数が見つかった場合は、通常の OLE ドキュメントの規則に従って移動します。 この手順では ヘルプ のメニューのマージに含める、コンテナーをコンテナーについて説明します。
オブジェクトを表示する前に IOleInPlaceFrame::SetMenuを呼び出すとコンテナーが挿入した内容に加えて ヘルプ メニューに追加サブメニューを持つかどうかをマージしたメニュー バー、コンテナーをチェックします。 その場合、コンテナーはマージされたメニュー バーに ヘルプ メニューが保存されます。 ヘルプ メニューに追加サブメニューがない場合、コンテナーはマージされたメニュー バーの ヘルプ メニューを削除します。 この手順では ヘルプ のメニューのマージに含める、オブジェクトをオブジェクトについて説明します。
最後に、メニューを逆アセンブルする時間の場合、オブジェクトは、他の挿入されたメニューの削除に加えて ヘルプ 挿入したメニューを削除します。 コンテナーはメニューを削除すると、挿入した他のメニューに加えて ヘルプ メニューを削除します。