サーバー : サーバー アイテム

埋め込みまたはリンクされた OLE 項目をユーザーが編集できるようコンテナーがサーバーを起動すると、サーバー アプリケーションによって「サーバー アイテム」が作成されます。COleServerItem から派生したクラスのオブジェクトであるサーバー アイテムは、サーバー ドキュメントとコンテナー アプリケーションの間のインターフェイスを提供します。

COleServerItem クラスは、OLE によって呼び出されるオーバーライド可能ないくつかのメンバー関数を定義します。通常は、コンテナーからの要求に応答します。 サーバー アイテムは、サーバー ドキュメントの一部またはドキュメント全体を表す場合があります。 OLE 項目がコンテナー ドキュメントに埋め込まれている場合、サーバー アイテムはサーバー ドキュメント全体を表します。 OLE 項目がリンクされている場合、サーバー アイテムは、サーバー ドキュメントの一部またはドキュメント全体を表します。これはリンクがドキュメントの一部へのリンクかまたは全体へのリンクかによって決まります。

たとえば HIERSVR サンプルでは、サーバー アイテム クラス CServerItem には、CServerNode クラスのオブジェクトへのポインターであるメンバーがあります。 CServerNode オブジェクトは、ツリーである HIERSVR アプリケーションのドキュメント内のノードです。 CServerNode オブジェクトがルート ノードの場合、CServerItem オブジェクトはドキュメント全体を表します。 CServerNode オブジェクトが子ノードの場合、CServerItem オブジェクトはドキュメントの一部を表します。 この操作の例については、MFC OLE サンプル HIERSVR をご覧ください。

サーバー アイテムの実装

アプリケーション ウィザードを使用してアプリケーションの「スターター」コードを生成する場合、スターター コードにサーバー アイテムを含めるには、[OLE オプション] ページからサーバー オプションのいずれかを選択する必要があるだけです。 既存のアプリケーションにサーバー アイテムを追加する場合は、次の手順を実行します。

サーバー アイテムを実装するには

  1. COleServerItem の派生クラスを作成します。

  2. 派生クラスで、OnDraw メンバー関数をオーバーライドします。

    フレームワークは、OLE 項目をメタファイルにレンダリングするために OnDraw を呼び出します。 コンテナー アプリケーションは、このメタファイルを使用して項目をレンダリングします。 アプリケーションのビュー クラスには OnDraw メンバー関数も含まれます。これは、サーバー アプリケーションがアクティブなときに項目をレンダリングするために使用されます。

  3. サーバー ドキュメント クラスに OnGetEmbeddedItem のオーバーライドを実装します。 詳細については、サーバー: サーバー ドキュメントの実装に関する記事および MFC OLE サンプル HIERSVR をご覧ください。

  4. サーバー アイテム クラスの OnGetExtent メンバー関数を実装します。 フレームワークは、この関数を呼び出して、項目のサイズを取得します。 既定の実装では、何も行われません。

サーバー アイテム アーキテクチャのヒント

サーバー アイテムの実装に示されているとおり、サーバー アプリケーションは、サーバーのビューとコンテナー アプリケーションで使用されるメタファイルの両方で項目をレンダリングできる必要があります。 Microsoft Foundation Class ライブラリのアプリケーション アーキテクチャでは、ビュー クラスの OnDraw メンバー関数は、編集中に項目をレンダリングします (「クラス ライブラリ リファレンス」の CView::OnDraw を参照)。 サーバー アイテムの OnDraw は、他のすべてのケースで項目をメタファイルにレンダリングします (COleServerItem::OnDraw を参照)。

コードの重複を回避するには、サーバー ドキュメント クラスにヘルパー関数を記述し、ビューおよびサーバー アイテム クラスの OnDraw 関数から前記の関数を呼び出します。 MFC OLE サンプル HIERSVR では、次の方法を使用します。関数 CServerView::OnDraw および CServerItem::OnDraw は両方とも CServerDoc::DrawTree を呼び出してこれらをレンダリングします。

ビューと項目は異なる条件下でレンダリングするため、両方に OnDraw メンバー関数があります。 ビューでは、ズーム、選択のサイズと範囲、クリッピング、スクロール バーなどのユーザー インターフェイス要素などの要因を考慮する必要があります。 一方、サーバー アイテムは常に OLE オブジェクト全体をレンダリングします。

詳細については、「クラス ライブラリ リファレンス」の CView::OnDrawCOleServerItemCOleServerItem::OnDraw、および COleServerDoc::OnGetEmbeddedItem をご覧ください。

関連項目

サーバー