メニューとリソース (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 アプリケーションで使用する必要があります。
以下の記事では、コンテナー、サーバー、およびインプレース アクティブ化を実装するために必要なメニューのマージに関連するトピックについて説明しています。