次の方法で共有


メニューとリソース : サーバーの変更点

この記事では、ビジュアル編集サーバー (コンポーネント) アプリケーションのメニューや他のリソースに加える必要がある変更について説明します。 サーバー アプリケーションは、スタンドアロン、埋め込み、またはインプレースの 3 つのモードのいずれかで起動できるため、メニュー構造やその他のリソースに多くの追加を行う必要があります。 「メニューとリソース (OLE)」で説明されているように、メニューは最大で 4 セットあります。 MDI フルサーバー アプリケーションには 4 つすべてが使用されますが、ミニサーバーに使用されるのは 3 つのみです。 アプリケーション ウィザードでは、目的のサーバーの種類に必要なメニュー レイアウトが作成されます。 多少のカスタマイズが必要になる場合があります。

アプリケーション ウィザードを使用しない場合は、MFC サンプル アプリケーション HIERSVR のリソース スクリプトである HIERSVR.RC を調べて、これらの変更がどのように実装されているかを確認することをお勧めします。

この記事では、次のトピックについて説明します。

サーバー メニューの追加

OLE ビジュアル編集をサポートするには、サーバー (コンポーネント) アプリケーションにメニュー リソースを追加する必要があります。 アプリケーションをスタンドアロン モードで実行したときに使用されるメニューは変更する必要はありません。ただし、アプリケーションをビルドする前に、インプレース アクティブ化をサポートするためのメニュー リソースと、完全に開かれたサーバーをサポートするためのメニュー リソースの、2 つの新しいメニュー リソースを追加する必要があります。 両方のメニュー リソースは、フルサーバー アプリケーションとミニサーバー アプリケーションで使用されます。

  • インプレース アクティブ化をサポートするには、スタンドアロン モードで実行したときに使用されるメニュー リソースとよく似たメニュー リソースを作成する必要があります。 このメニューの違いは、[ファイル] 項目と [ウィンドウ] 項目 (およびデータではなくアプリケーションを操作するその他のメニュー項目) がないことです。 これらのメニュー項目はコンテナー アプリケーションによって提供されます。 このメニューの結合手法の詳細と例については、「メニューとリソース: メニューの結合」を参照してください。

  • 完全に開かれたアクティブ化をサポートするには、スタンドアロン モードで実行したときに使用されるメニュー リソースとほぼ同じメニュー リソースを作成する必要があります。 このメニュー リソースに対する唯一の変更は、複合ドキュメントに埋め込まれた項目に対してはサーバーが操作を行うという事実を反映するために、一部の項目が書き直されていることです。

この記事に記載されている変更に加えて、リソース ファイルには、Microsoft Foundation Class ライブラリの実装に必要な AFXOLESV.RC を含める必要があります。 このファイルは MFC\Include サブディレクトリにあります。

サーバー アプリケーションのアクセラレータ テーブルの追加

2 つの新しいアクセラレータ テーブル リソースをサーバー アプリケーションに追加する必要があります。これらは、前述の新しいメニュー リソースに直接対応しています。 1 つ目のアクセラレータ テーブルは、サーバー アプリケーションがインプレースでアクティブ化されるときに使用されます。 これは、[ファイル] メニューと [ウィンドウ] メニューに関連付けられているものを除いて、ビューのアクセラレータ テーブルのすべてのエントリで構成されます。

2 つ目のテーブルは、ビューのアクセラレータ テーブルのほぼ同一のコピーです。 その相違は、「サーバー メニューの追加」に説明されている完全に開かれたメニューに加えられた変更に似ています。

これらのアクセラレータ テーブルの変更の例については、IDR_HIERSVRTYPE_SRVR_IP および IDR_HIERSVRTYPE_SRVR_EMB アクセラレータ テーブルを、MFC OLE サンプル HIERSVR に含まれている HIERSVR.RC ファイルの IDR_MAINFRAME と比較してください。 インプレース テーブルには "ファイル" および "ウィンドウ" アクセラレータがなく、埋め込まれたテーブルにそれらの正確なコピーがあります。

サーバー アプリケーションの文字列テーブルの追加

サーバー アプリケーションで必要な文字列テーブルに対する追加は、OLE の初期化が失敗したことを示す 1 つの文字列のみです。 例として、アプリケーション ウィザードによって生成される文字列テーブル エントリを次に示します。

ID String
IDP_OLE_INIT_FAILED OLE の初期化に失敗しました。 OLE ライブラリが正しいバージョンか確認してください。

ミニサーバーの追加

上記のフル サーバーの場合と同じ追加がミニサーバーにも適用されます。 ミニサーバーはスタンドアロン モードで実行できないため、メイン メニューはかなり小さくなります。 アプリケーション ウィザードによって作成されたメイン メニューには [ファイル] メニューのみがあり、そこには [終了] と [バージョン情報] の項目しか含まれていません。 ミニサーバーの組み込みおよびインプレース メニューとアクセラレータは、フル サーバーの場合と同じです。

関連項目

メニューとリソース (OLE)
メニューとリソース: メニューの結合