サーバー : サーバー アイテム
埋め込みまたはリンクされた OLE 項目をユーザーが編集できるようコンテナーがサーバーを起動すると、サーバー アプリケーションによって「サーバー アイテム」が作成されます。COleServerItem
から派生したクラスのオブジェクトであるサーバー アイテムは、サーバー ドキュメントとコンテナー アプリケーションの間のインターフェイスを提供します。
COleServerItem
クラスは、OLE によって呼び出されるオーバーライド可能ないくつかのメンバー関数を定義します。通常は、コンテナーからの要求に応答します。 サーバー アイテムは、サーバー ドキュメントの一部またはドキュメント全体を表す場合があります。 OLE 項目がコンテナー ドキュメントに埋め込まれている場合、サーバー アイテムはサーバー ドキュメント全体を表します。 OLE 項目がリンクされている場合、サーバー アイテムは、サーバー ドキュメントの一部またはドキュメント全体を表します。これはリンクがドキュメントの一部へのリンクかまたは全体へのリンクかによって決まります。
たとえば HIERSVR サンプルでは、サーバー アイテム クラス CServerItem
には、CServerNode
クラスのオブジェクトへのポインターであるメンバーがあります。 CServerNode
オブジェクトは、ツリーである HIERSVR アプリケーションのドキュメント内のノードです。 CServerNode
オブジェクトがルート ノードの場合、CServerItem
オブジェクトはドキュメント全体を表します。 CServerNode
オブジェクトが子ノードの場合、CServerItem
オブジェクトはドキュメントの一部を表します。 この操作の例については、MFC OLE サンプル HIERSVR をご覧ください。
サーバー アイテムの実装
アプリケーション ウィザードを使用してアプリケーションの「スターター」コードを生成する場合、スターター コードにサーバー アイテムを含めるには、[OLE オプション] ページからサーバー オプションのいずれかを選択する必要があるだけです。 既存のアプリケーションにサーバー アイテムを追加する場合は、次の手順を実行します。
サーバー アイテムを実装するには
COleServerItem
の派生クラスを作成します。派生クラスで、
OnDraw
メンバー関数をオーバーライドします。フレームワークは、OLE 項目をメタファイルにレンダリングするために
OnDraw
を呼び出します。 コンテナー アプリケーションは、このメタファイルを使用して項目をレンダリングします。 アプリケーションのビュー クラスにはOnDraw
メンバー関数も含まれます。これは、サーバー アプリケーションがアクティブなときに項目をレンダリングするために使用されます。サーバー ドキュメント クラスに
OnGetEmbeddedItem
のオーバーライドを実装します。 詳細については、サーバー: サーバー ドキュメントの実装に関する記事および MFC OLE サンプル HIERSVR をご覧ください。サーバー アイテム クラスの
OnGetExtent
メンバー関数を実装します。 フレームワークは、この関数を呼び出して、項目のサイズを取得します。 既定の実装では、何も行われません。
サーバー アイテム アーキテクチャのヒント
サーバー アイテムの実装に示されているとおり、サーバー アプリケーションは、サーバーのビューとコンテナー アプリケーションで使用されるメタファイルの両方で項目をレンダリングできる必要があります。 Microsoft Foundation Class ライブラリのアプリケーション アーキテクチャでは、ビュー クラスの OnDraw
メンバー関数は、編集中に項目をレンダリングします (「クラス ライブラリ リファレンス」の CView::OnDraw を参照)。 サーバー アイテムの OnDraw
は、他のすべてのケースで項目をメタファイルにレンダリングします (COleServerItem::OnDraw を参照)。
コードの重複を回避するには、サーバー ドキュメント クラスにヘルパー関数を記述し、ビューおよびサーバー アイテム クラスの OnDraw
関数から前記の関数を呼び出します。 MFC OLE サンプル HIERSVR では、次の方法を使用します。関数 CServerView::OnDraw
および CServerItem::OnDraw
は両方とも CServerDoc::DrawTree
を呼び出してこれらをレンダリングします。
ビューと項目は異なる条件下でレンダリングするため、両方に OnDraw
メンバー関数があります。 ビューでは、ズーム、選択のサイズと範囲、クリッピング、スクロール バーなどのユーザー インターフェイス要素などの要因を考慮する必要があります。 一方、サーバー アイテムは常に OLE オブジェクト全体をレンダリングします。
詳細については、「クラス ライブラリ リファレンス」の CView::OnDraw、COleServerItem、COleServerItem::OnDraw、および COleServerDoc::OnGetEmbeddedItem をご覧ください。