次の方法で共有


メニューとリソース (OLE)

このグループの記事では、MFC OLE ドキュメント アプリケーションにおけるメニューとリソースの使用について説明します。

OLE ビジュアル編集では、OLE ドキュメント アプリケーションによって提供されるメニューやその他のリソースに、追加の要件があります。これは、コンテナー アプリケーションとサーバー (コンポーネント) アプリケーションのどちらも、多くのモードで起動したり使用したりできるためです。 たとえば、フルサーバー アプリケーションは、これらの 3 つのモードのいずれかで実行できます。

  • スタンドアロン。

  • インプレース。コンテナーのコンテキスト内で項目を編集するため。

  • オープン。コンテナーのコンテキストの外部で、多くの場合は別のウィンドウで、項目を編集するため。

これには、アプリケーションの可能なモードごとに 1 つずつ、3 つの個別のメニュー レイアウトが必要です。 アクセラレータ テーブルも、新しいモードごとに必要です。 コンテナー アプリケーションは、インプレース アクティブ化をサポートしている場合としていない場合があります。サポートしている場合は、新しいメニュー構造と、関連するアクセラレータ テーブルが必要です。

インプレース アクティブ化では、コンテナー アプリケーションとサーバー アプリケーションが、メニュー、ツール バー、およびステータス バーの領域に関してネゴシエートする必要があります。 すべてのリソースは、このことを考慮して設計する必要があります。 このトピックの詳細については、「メニューとリソース: メニューの結合」という記事で説明しています。

これらの問題のため、アプリケーション ウィザードを使用して作成された OLE ドキュメント アプリケーションには、最大で 4 つの個別のメニューとアクセラレータ テーブル リソースを設定することができます。 これらは、次の理由で使用されます。

リソース名 使用
IDR_MAINFRAME MDI アプリケーションで、ファイルが開かれていない場合、または SDI アプリケーションで、開かれているファイルに関係なく、使用されます。 これは、非 OLE アプリケーションで使用される標準のメニューです。
IDR_<プロジェクト>TYPE MDI アプリケーションで、ファイルが開かれている場合に使用されます。 アプリケーションがスタンドアロンで実行されている場合に使用されます。 これは、非 OLE アプリケーションで使用される標準のメニューです。
IDR_<プロジェクト>TYPE_SRVR_IP オブジェクトがインプレースで開かれている場合に、サーバーまたはコンテナーによって使用されます。
IDR_<プロジェクト>TYPE_SRVR_EMB インプレース アクティブ化を使用せずにオブジェクトが開かれている場合に、サーバー アプリケーションによって使用されます。

これらの各リソース名は、メニューと、通常はアクセラレータ テーブルを表します。 同様のスキームを、アプリケーション ウィザードを使用して作成されていない MFC アプリケーションで使用する必要があります。

以下の記事では、コンテナー、サーバー、およびインプレース アクティブ化を実装するために必要なメニューのマージに関連するトピックについて説明しています。

関連項目

OLE