コンテナー : コンテナーの実装
この記事では、コンテナーを実装する手順を要約すると共に、コンテナーの実装についてより詳しく説明されている他の記事を紹介します。 また、任意で実装できるいくつかの OLE 機能とそれらの機能について説明する記事も紹介しています。
CWinApp の派生クラスを用意するには
InitInstance
メンバー関数のAfxOleInit
を呼び出して OLE ライブラリを初期化します。InitInstance
でCDocTemplate::SetContainerInfo
を呼び出し、埋め込み項目がインプレースでアクティブ化されたときに使用されるメニューとアクセラレータ リソースを割り当てます。 このトピックの詳細については、アクティブ化に関する記事を参照してください。
これらの機能は、MFC アプリケーション ウィザードを使用してコンテナー アプリケーションを作成すると自動的に提供されます。 MFC EXE プログラムの作成に関するページを参照してください。
ビュー クラスを用意するには
選択した項目へのポインター (複数選択をサポートする場合は一連のポインター) を保持することにより、選択された項目を追跡します。 すべての OLE 項目は、
OnDraw
関数で描画する必要があります。渡された項目が現在選択されているかどうかを確認するために
IsSelected
をオーバーライドします。[オブジェクトの挿入] ダイアログ ボックスを表示するための
OnInsertObject
メッセージ ハンドラーを実装します。ビューからインプレース アクティブ OLE 埋め込み項目にフォーカスを移すための
OnSetFocus
メッセージ ハンドラーを実装します。親ビューのサイズの変化に合わせて四角形の変更が必要であることを OLE 埋め込み項目に通知するための
OnSize
メッセージ ハンドラーを実装します。
これらの機能の実装はアプリケーションごとに大きく異なるため、アプリケーション ウィザードから提供されるのは基本的な実装のみです。 アプリケーションを適切に動作させるためには、通常、開発者がこれらの関数をカスタマイズする必要があります。 その例については、コンテナーのサンプルを参照してください。
埋め込まれた項目とリンクされた項目を処理するには
COleClientItem からクラスを派生させます。 このクラスのオブジェクトは、OLE ドキュメントに埋め込まれた項目またはリンクされた項目を表します。
OnChange
、OnChangeItemPosition
、OnGetItemPosition
をオーバーライドします。 これらは、埋め込まれた項目とリンクされた項目のサイズ、位置、変更に対処する関数です。
クラスの派生は、アプリケーション ウィザードによって自動的に行われますが、OnChange
など、前の手順 2. に示した関数は通常、開発者がオーバーライドする必要があります。 これらの関数の実装はアプリケーションごとに異なるため、ほとんどのアプリケーションではスケルトン実装をカスタマイズする必要があります。 その例については、MFC のサンプル DRAWCLI および CONTAINER を参照してください。
OLE をサポートするためには、コンテナー アプリケーションのメニュー構造に多数の項目を追加する必要があります。 詳細については、「メニューとリソース : コンテナーの変更点」を参照してください。
コンテナー アプリケーションでは、他にも次のような機能をサポートできます。
埋め込み項目を編集するときのインプレース アクティブ化。
詳細については、アクティブ化に関するページを参照してください。
選択したものをサーバー アプリケーションからドラッグ アンド ドロップすることによる OLE 項目の作成。
詳細については、「OLE のドラッグ アンド ドロップ」を参照してください。
埋め込みオブジェクトへのリンクやコンテナーとサーバーの複合アプリケーション。
詳細については、「コンテナー: 高度な機能」を参照してください。