メニューとリソース : メニューの結合
この記事では、OLE ドキュメント アプリケーションがビジュアル編集とインプレース アクティベーションを適切に処理するために必要な手順を詳しく説明します。 インプレース アクティベーションは、コンテナー とサーバー (コンポーネント) の両方のアプリケーションに課題を生みます。 ユーザーは同じフレーム ウィンドウ (コンテナー ドキュメントのコンテキスト内) に残りますが、実際には別のアプリケーション (サーバー) を実行しています。 これには、コンテナーとサーバー アプリケーションのリソース間の調整が必要です。
この記事では、次のトピックについて説明します。
メニュー レイアウト
最初の手順では、メニュー レイアウトを調整します。 コンテナー アプリケーションでは、埋め込み項目がアクティブ化されている場合だけに使用する新しいメニューを作成する必要があります。 少なくとも、このメニューは次の順序で構成されている必要があります:
[ファイル] メニューは、ファイルが開いているときに使用されるメニューと同じです。 (通常、次の項目の前に他のメニュー項目は配置されます。)
2 つの連続する区切り記号。
ファイルが開いているときに使用されるウィンドウ メニューと同じです (MDI アプリケーション内のコンテナー アプリケーションの場合のみ)。 一部のアプリケーションには、このグループに属する他のメニュー ([オプション] メニューなど) が含まれている場合があります。このメニューは、埋め込み項目がアクティブ化されるとメニューに残ります。
Note
Zoom など、コンテナー ドキュメントのビューに影響を与えるメニューが他に表示される場合があります。 これらのコンテナー メニューは、このメニュー リソースの 2 つの区切り記号の間に表示されます。
サーバー (コンポーネント) アプリケーションでは、インプレース アクティベーション専用の新しいメニューも作成する必要があります。 これは、ファイルが開いているときに使用されるメニューのようにする必要がありますが、データの代わりにサーバー ドキュメントを操作する [ファイル] や [ウィンドウ] などのメニュー項目は含めずに表示されます。 通常、このメニューは次のように構成されます:
[編集] メニューは、ファイルが開いているときに使用されるメニューと同じです。
区切り記号。
Scribble サンプル アプリケーションの [ペン] メニューなどのオブジェクト編集メニュー。
区切り記号。
[ヘルプ] メニュー。
例として、コンテナーとサーバーのインプレース メニューのサンプル レイアウトを見てみましょう。 この例をより明確にするために、各メニュー項目の詳細は削除されました。 コンテナーのインプレース メニューには、次のエントリがあります:
IDR_CONTAINERTYPE_CNTR_IP MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File C1"
MENUITEM SEPARATOR
POPUP "&Zoom C2"
MENUITEM SEPARATOR
POPUP "&Options C3"
POPUP "&Window C3"
END
連続する区切り記号は、サーバー メニューの最初の部分の移動先を示します。 次に、サーバーのインプレース メニューを確認します:
IDR_SERVERTYPE_SRVR_IP MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Edit S1"
MENUITEM SEPARATOR
POPUP "&Format S2"
MENUITEM SEPARATOR
POPUP "&Help S3"
END
ここで区切り記号は、コンテナー メニュー項目の 2 番目のグループが移動する場所を示します。 このコンテナー内でこのサーバーのオブジェクトがアクティブ化されると、結果として得られるメニュー構造は次のようになります:
BEGIN
POPUP "&File C1"
POPUP "&Edit S1"
POPUP "&Zoom C2"
POPUP "&Format S2"
POPUP "&Options C3
POPUP "&Window C3"
POPUP "&Help S3"
END
ご覧のように、区切り記号は各アプリケーションのメニューの異なるグループに置き換えられています。
インプレース メニューに関連付けられているアクセラレータ テーブルも、サーバー アプリケーションによって提供される必要があります。 コンテナーでは、それらを独自のアクセラレータ テーブルに組み込む予定です。
埋め込み項目がアクティブ化にされると、フレームワークによってインプレース メニューが読み込まれます。 次に、サーバー アプリケーションにインプレース アクティベーション用のメニューを要求し、区切り記号のある場所に挿入します。 これは、メニューを組み合わせる方法です。 ファイルやウィンドウ配置の操作はコンテナーからメニューを取得し、項目の操作はサーバーからメニューを取得します。
ツールバーとステータス バー
サーバー アプリケーションでは、新しいツール バーを作成し、そのビットマップを別のファイルに格納する必要があります。 アプリケーション ウィザードで生成されたアプリケーションは、このビットマップを ITOOLBAR.BMP という名前のファイルに格納します。 新しいツールバーは、サーバーの項目がインプレースでアクティブ化されている場合にコンテナー アプリケーションのツール バーを置き換えるもので、通常のツールバーと同じ項目が含まれているはずですが、[ファイル] や [ウィンドウ] メニューの項目を表すアイコンは削除されています。
このツールバーは、COleIPFrameWnd
- 派生クラス に読み込まれ、アプリケーション ウィザードによって自動的に作成されます。 ステータス バーは、コンテナー アプリケーションによって制御されます。 インプレース フレーム ウィンドウ実装の詳細は、サーバー: サーバーの実装を参照してください。