次の方法で共有


メニューとリソース: メニューのマージ

この記事では、OLE ドキュメント アプリケーションがビジュアル編集とインプレース アクティブ化を適切に処理するために必要な手順について詳しく説明します。 インプレース ライセンス認証は、コンテナー アプリケーションとサーバー (コンポーネント) アプリケーションの両方にとって課題となります。 ユーザーは (コンテナー ドキュメントのコンテキスト内で) 同じフレーム ウィンドウに残りますが、実際には別のアプリケーション (サーバー) を実行しています。 これには、コンテナーアプリケーションとサーバーアプリケーションのリソース間の調整が必要です。

この記事で取り上げるトピックは次のとおりです。

メニュー レイアウト

最初の手順では、メニュー レイアウトを調整します。 コンテナー アプリケーションでは、埋め込み項目が有効になっている場合にのみ使用する新しいメニューを作成する必要があります。 少なくとも、このメニューは次の順序で構成されている必要があります。

  1. [ファイル] メニューは、ファイルを開くときに使用するメニューと同じです。 (通常、次の項目の前に他のメニュー項目は配置されません。

  2. 連続する 2 つの区切り記号。

  3. ウィンドウ メニューは、ファイルを開くときに使用されるメニューと同じです (MDI アプリケーション内のコンテナー アプリケーションの場合のみ)。 一部のアプリケーションには、このグループに属する他のメニュー (オプション メニューなど) が含まれている場合があります。このメニューは、埋め込み項目が有効になったときにメニューに残ります。

    ズームなど、コンテナー ドキュメントのビューに影響する他のメニューがある場合があります。 これらのコンテナー メニューは、このメニュー リソースの 2 つの区切り記号の間に表示されます。

サーバー (コンポーネント) アプリケーションでは、インプレース アクティブ化専用の新しいメニューも作成する必要があります。 ファイルを開くときに使用されるメニューに似ていますが、データではなくサーバー ドキュメントを操作する [ファイル] や [ウィンドウ] などのメニュー項目はありません。 通常、このメニューは次で構成されます。

  1. [編集] メニューは、ファイルを開くときに使用するメニューと同じです。

  2. 区切り文字

  3. Scribble サンプル アプリケーションの [ペン] メニューなどのオブジェクト編集メニュー。

  4. 区切り文字

  5. [ヘルプ] メニュー。

たとえば、コンテナーとサーバーのサンプル インプレース メニューのレイアウトを確認します。 例をより明確にするために、各メニュー項目の詳細が削除されました。 コンテナーのインプレース メニューには、次のエントリがあります。

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派生クラスに読み込まれます。 ステータス バーは、コンテナー アプリケーションによって処理されます。 インプレース フレーム ウィンドウの実装の詳細については、「 サーバー: サーバーの実装」を参照してください

こちらも参照ください

メニューとリソース (OLE)
アクティブ化
サーバー
コンテナー