次の方法で共有


メニューとリソース : コンテナーの変更点

この記事では、ビジュアル編集コンテナー アプリケーションのメニューや他のリソースに加える必要がある変更について説明します。

コンテナー アプリケーションでは、2 種類の変更、つまり OLE ビジュアル編集をサポートするための既存のリソースの変更と、インプレース アクティブ化に使用される新しいリソースの追加を行う必要があります。 アプリケーション ウィザードを使用してコンテナー アプリケーションを作成する場合は、これらの手順が自動的に実行されますが、カスタマイズが必要になる場合があります。

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

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

コンテナー メニューの追加

[編集] メニューに次の項目を追加する必要があります。

Item 目的
新しいオブジェクトの挿入 OLE の [オブジェクトの挿入] ダイアログ ボックスを開いて、リンク項目または埋め込み項目をドキュメントに挿入します。
リンク貼り付け クリップボードの項目へのリンクをドキュメントに貼り付けます。
OLE 動詞 選択された項目のプライマリ動詞を呼び出します。 このメニュー項目のテキストは、選択された項目のプライマリ動詞を反映するように変更されます。
リンク OLE の [リンクの編集] ダイアログ ボックスを開いて、既存のリンク項目を変更します。

ソース ファイルでは、この記事に記載されている変更に加えて、Microsoft Foundation Class ライブラリの実装に必要な AFXOLECL.RC を含める必要があります。 必要なメニューの追加は、[新しいオブジェクトの挿入] のみです。 他の項目を追加することもできますが、ここに示されているものが最も一般的です。

含まれている項目のインプレース アクティブ化をサポートする場合は、コンテナー アプリケーションに新しいメニューを作成する必要があります。 このメニューは、ファイルが開かれているときに使用されるのと同じ [ファイル] メニューと [ウィンドウ] ポップアップ メニューで構成されますが、それらの間に 2 本の区分線が配置されています。 これらの区分線は、サーバー (コンポーネント) 項目 (アプリケーション) がインプレースでアクティブ化されたときにメニューを配置する場所を示すために使用されます。 このメニューの結合手法の詳細については、「メニューとリソース: メニューの結合」を参照してください。

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

インプレース アクティブ化をサポートする場合は、コンテナー アプリケーションのアクセラレータ テーブル リソースに小さな変更を加える必要があります。 1 つ目の変更では、ユーザーがエスケープ キー (Esc) を押して、インプレース編集モードをキャンセルできるようにします。 次のエントリをメイン アクセラレータ テーブルに追加します。

ID キー Type
ID_CANCEL_EDIT_CNTR VK_ESCAPE VIRTKEY

2 つ目の変更では、インプレース アクティブ化用に作成された新しいメニュー リソースに対応する新しいアクセラレータ テーブルを作成します。 このテーブルには、上記の VK_ESCAPE エントリに加えて、[ファイル] メニューと [ウィンドウ] メニューのエントリがあります。 次の例は、MFC サンプル CONTAINER でインプレース アクティブ化用に作成されたアクセラレータ テーブルです。

ID キー Type
ID_FILE_NEW Ctrl + N VIRTKEY
ID_FILE_OPEN Ctrl + O VIRTKEY
ID_FILE_SAVE Ctrl + S VIRTKEY
ID_FILE_PRINT Ctrl + P VIRTKEY
ID_NEXT_PANE VK_F6 VIRTKEY
ID_PREV_PANE SHIFT+VK_F6 VIRTKEY
ID_CANCEL_EDIT_CNTR VK_ESCAPE VIRTKEY

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

コンテナー アプリケーションの文字列テーブルに対する変更の大部分は、「コンテナー メニューの追加」で説明されている追加のメニュー項目に対応しています。 これにより、各メニュー項目が表示されたときにステータス バーに表示されるテキストを指定します。 例として、アプリケーション ウィザードによって生成される文字列テーブル エントリを次に示します。

ID String
IDP_OLE_INIT_FAILED OLE の初期化に失敗しました。 OLE ライブラリが正しいバージョンか確認してください。
IDP_FAILED_TO_CREATE オブジェクトの作成に失敗しました。 システム レジストリにオブジェクトが登録されているか確認してください。

関連項目

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