メニューとリソース : コンテナーの変更点
この記事では、ビジュアル編集コンテナー アプリケーションのメニューや他のリソースに加える必要がある変更について説明します。
コンテナー アプリケーションでは、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 | オブジェクトの作成に失敗しました。 システム レジストリにオブジェクトが登録されているか確認してください。 |