次の方法で共有


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

コンテナーが OLE 埋め込みアイテムまたはリンク アイテムを編集するためにサーバーを起動すると、サーバー アプリケーションは "サーバー アイテム" を作成します。サーバー アイテムは、COleServerItem の派生クラスのオブジェクトであり、サーバー ドキュメントとコンテナー アプリケーション間のインターフェイスになります。

COleServerItem クラスには、オーバーライド可能なメンバー関数があります。通常、これらの関数は、コンテナーからの要求が発生すると OLE から呼び出されます。 サーバー アイテムは、サーバー ドキュメントの一部あるいは全体を表すことができます。 OLE アイテムが埋め込みアイテムのときは、サーバー アイテムはサーバー ドキュメント全体を表します。 OLE アイテムがリンク アイテムのときは、サーバー アイテムは、リンクの範囲に応じて、サーバー ドキュメントの一部または全体を表します。

たとえば、サンプル アプリケーション HIERSVR では、サーバー アイテム クラス CServerItem のメンバーとして、CServerNode クラスのオブジェクトへのポインターがあります。 HIERSVR アプリケーションのドキュメント全体はツリー構造になっていて、CServerNode オブジェクトはツリー中のノードを表します。 CServerNode オブジェクトがルート ノードのときは、CServerItem オブジェクトはドキュメント全体を表します。 CServerNode オブジェクトが子ノードのときは、CServerItem オブジェクトはドキュメントの一部を表します。 この相互作用の一例として、MFC の OLE サンプル プログラム HIERSVR を参照してください。

サーバー アイテムの実装

アプリケーション ウィザードを使ってアプリケーションの初期コードを作成する場合は、[複合ドキュメント サポート] ページでいずれかのサーバー オプションを選択すると、サーバー アイテムを含む初期コードが作成されます。 既存のアプリケーションを改良してサーバー アイテムを付加する場合は、次の手順に従ってください。

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

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

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

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

  3. サーバー ドキュメント クラスのオーバーライド版 OnGetEmbeddedItem を実装します。 詳細についてを参照してください「サーバー:サーバー ドキュメントの実装 および MFC OLE のサンプル HIERSVR

  4. サーバー アイテム クラスのメンバー関数 OnGetExtent を実装します。 この関数は、アイテムのサイズを調べるために、フレームワークから呼び出されます。 既定の実装では、何も行われません。

サーバー アイテムの動作のしくみ

「サーバー アイテムの実装」で説明したように、サーバー アプリケーションは、サーバーのビューとコンテナー アプリケーションが利用するメタファイルの両方に、アイテムをレンダリングする必要があります。 MFC ライブラリのアプリケーション アーキテクチャでは、ビュー クラスのメンバー関数 OnDraw は、アイテムの編集時にアイテムをレンダリングします (『MFC リファレンス』の「CView::OnDraw」を参照してください)。 一方、サーバー アイテムの OnDraw は、編集時以外のすべての場合に、アイテムをメタファイルにレンダリングします (「COleServerItem::OnDraw」を参照してください)。

コードの重複を避けるには、サーバー ドキュメント クラスのヘルパー関数を作成し、ビュー クラスとサーバー アイテム クラスの関数 OnDraw からこのヘルパー関数を呼び出します。 MFC OLE サンプルHIERSVRこの戦略を使用して。関数CServerView::OnDrawCServerItem::OnDraw 両方を呼び出す CServerDoc::DrawTreeアイテムをレンダリングします。

ビュー とサーバー アイテムの両方にメンバー関数 OnDraw があるのは、レンダリングを行う環境が異なるためです。 ビュー クラスでは、拡大、選択、クリッピングなどの条件、およびスクロール バーなどのユーザー インターフェイスを考慮する必要があります。 一方、サーバー アイテム クラスでは、常に OLE オブジェクト全体をレンダリングします。

詳細については、『MFC リファレンス』の「CView::OnDraw」、「COleServer Item」、「COleServerItem::OnDraw」、および「COleServerDoc::OnGetEmbeddedItem」を参照してください。

参照

概念

サーバー