次の方法で共有


コンテナー: 高度な機能

この記事では、オプションの高度な機能を既存のコンテナー アプリケーションに組み込むために必要な手順について説明します。 この機能は次のとおりです。

コンテナー/サーバー アプリケーションの作成

コンテナー/サーバー アプリケーションは、コンテナーとサーバーの両方として機能するアプリケーションです。 この例は、Microsoft Word for Windows です。 Word for Windows ドキュメントを他のアプリケーションに埋め込んだり、Word for Windows ドキュメントにアイテムを埋め込んだりすることもできます。 コンテナー アプリケーションをコンテナーと完全サーバーの両方に変更するプロセス (コンテナー/ミニサーバー アプリケーションを組み合わせて作成することはできません) は、完全なサーバーを作成するプロセスと似ています。

サーバー : サーバーの実装 に関する記事では、サーバー アプリケーションの実装に必要なタスクの一覧を示します。 コンテナー アプリケーションをコンテナー/サーバー アプリケーションに変換する場合は、コンテナーにコードを追加して、同じタスクの一部を実行する必要があります。 考慮すべき重要な点を次に示します。

  • アプリケーション ウィザードによって作成されたコンテナー コードは、既に OLE サブシステムを初期化します。 そのサポートのために何も変更または追加する必要はありません。

  • ドキュメント クラスの基底クラスが COleDocumentされている場合は、基底クラスを COleServerDoc に変更します。

  • COleClientItem::CanActivateをオーバーライドして、サーバー自体がインプレース編集に使用されている間にアイテムが適切に編集されないようにします。

    たとえば、MFC OLE サンプル OCLIENT には、コンテナー/サーバー アプリケーションによって作成された項目が埋め込まれています。 OCLIENT アプリケーションを開き、コンテナー/サーバー アプリケーションによって作成された項目をインプレース編集します。 アプリケーションの項目を編集するときに、MFC OLE サンプル HIERSVR によって作成された項目を埋め込む必要があります。 これを行うには、インプレース アクティブ化を使用できません。 この項目をアクティブにするには、HIERSVR を完全に開く必要があります。 Microsoft Foundation クラス ライブラリはこの OLE 機能をサポートしていないため、 COleClientItem::CanActivate をオーバーライドすると、この状況を確認し、アプリケーションで実行時エラーが発生する可能性を防ぐことができます。

新しいアプリケーションを作成し、コンテナー/サーバー アプリケーションとして機能させる場合は、アプリケーション ウィザードの [OLE オプション] ダイアログ ボックスでそのオプションを選択すると、このサポートが自動的に作成されます。 詳細については、「 概要: ActiveX コントロール コンテナーの作成」を参照してください。 MFC サンプルの詳細については、「 MFC サンプル」を参照してください。

MDI アプリケーションをそれ自体に挿入することはできません。 コンテナー/サーバーであるアプリケーションは、SDI アプリケーションでない限り、それ自体に挿入できません。

埋め込みオブジェクトへのリンク機能を使用すると、ユーザーはコンテナー アプリケーション内の埋め込みオブジェクトへの OLE リンクを含むドキュメントを作成できます。 たとえば、埋め込みスプレッドシートを含むワード プロセッサでドキュメントを作成します。 アプリケーションが埋め込みオブジェクトへのリンクをサポートしている場合は、ワード プロセッサのドキュメントに含まれるスプレッドシートへのリンクを貼り付けることができます。 この機能により、アプリケーションは、ワード プロセッサが最初に取得した場所を知らずに、スプレッドシートに含まれる情報を使用できます。

  1. COleLinkingDocではなく、COleDocumentからドキュメント クラスを派生させます。

  2. OLE 開発ツールに含まれているクラス ID ジェネレーターを使用して、アプリケーションの OLE クラス ID (CLSID) を作成します。

  3. OLE にアプリケーションを登録します。

  4. COleTemplateServer オブジェクトをアプリケーション クラスのメンバーとして作成します。

  5. アプリケーション クラスの InitInstance メンバー関数で、次の操作を行います。

    • オブジェクトの ConnectTemplate メンバー関数を呼び出して、COleTemplateServer オブジェクトをドキュメント テンプレートに接続します。

    • COleTemplateServer::RegisterAll メンバー関数を呼び出して、すべてのクラス オブジェクトを OLE システムに登録します。

    • COleTemplateServer::UpdateRegistryを呼び出します。 "/Embedded" スイッチを使用してアプリケーションを起動しない場合は、UpdateRegistryする唯一のパラメーターをOAT_CONTAINERする必要があります。 これにより、埋め込みオブジェクトへのリンクをサポートできるコンテナーとしてアプリケーションが登録されます。

      アプリケーションが "/Embedded" スイッチを使用して起動された場合、サーバー アプリケーションと同様にメイン ウィンドウは表示されません。

MFC OLE サンプル OCLIENT では、この機能が実装されています。 これを行う方法の例については、OCLIENT の InitInstance 関数を参照してください このサンプル アプリケーションの CPP ファイル。

こちらも参照ください

コンテナー
サーバー