次の方法で共有


複数のドキュメント ビューのサポート

エディター用に個別のドキュメント データとドキュメント ビュー オブジェクトを作成することで、1 つのドキュメントの複数のビューを提供できます。 追加のドキュメント ビューが役に立つ場合があります。

  • 新しいウィンドウのサポート: エディターで既にウィンドウを開いているユーザーが [ウィンドウ] メニューから [しいウィンドウ] コマンドを選択して新しいウィンドウを開くことができるように、エディターで同じ種類の 2 つ以上のビューを提供する必要があります。

  • フォームとコード ビューのサポート: エディターでさまざまな種類のビューを提供する必要があります。 たとえば、Visual Basic では、フォーム ビューとコード ビューの両方が提供されます。

    詳細については、Visual Studio パッケージ テンプレートによって作成されたカスタム エディター プロジェクトのEditorFactory.cs ファイルの CreateEditorInstance プロシージャを参照してください。 このプロジェクトの詳細については、「 チュートリアル: カスタム エディターの作成」を参照してください。

ビューの同期

複数のビューを実装する場合、ドキュメント データ オブジェクトは、すべてのビューをデータと同期する役割を担います。 VsTextBufferのイベント処理インターフェイスを使用して、複数のビューをデータと同期できます。

VsTextBuffer オブジェクトを使用して複数のビューを同期しない場合は、ドキュメント データ オブジェクトに加えられた変更を処理する独自のイベント システムを実装する必要があります。 さまざまなレベルの細分性を使用して、複数のビューを最新の状態に保つことができます。 最大粒度の設定では、1 つのビューを入力すると、他のビューがすぐに更新されます。 最小粒度では、他のビューはアクティブになるまで更新されません。

ドキュメント データが既に開いているかどうかを判断する

次の図に示すように、統合開発環境 (IDE) の実行中のドキュメント テーブル (RDT) は、ドキュメントのデータが既に開いているかどうかを追跡するのに役立ちます。

DocDataView グラフィック

複数のビュー

既定では、各ビュー (ドキュメント ビュー オブジェクト) は、独自のウィンドウ フレーム (IVsWindowFrame) に含まれています。 ただし、既に記載したように、ドキュメント データは複数のビューに表示できます。 これを有効にするために、Visual Studio は RDT をチェックして、対象のドキュメントがエディターで既に開かれているかどうかを判断します。 IDE が CreateEditorInstance を呼び出してエディターを作成すると、 punkDocDataExisting パラメーターで返される NULL 以外の値は、ドキュメントが既に別のエディターで開かれていることを示します。 RDT の機能の詳細については、「 ドキュメント テーブルの実行」を参照してください。

IVsEditorFactory実装で、punkDocDataExistingで返されたドキュメント データ オブジェクトを調べて、ドキュメント データがエディターに適しているかどうかを判断します。 (たとえば、HTML エディターでは HTML データのみを表示する必要があります)。適切な場合は、エディター ファクトリでデータの 2 つ目のビューを提供する必要があります。 punkDocDataExisting パラメーターがNULLされていない場合は、ドキュメント データ オブジェクトが別のエディターで開かれているか、ドキュメント データが同じエディターを使用して別のビューで既に開かれている可能性があります。 ドキュメント データがエディター ファクトリでサポートされていない別のエディターで開いている場合、Visual Studio はエディター ファクトリを開きません。 詳細については、「 方法: ビューをドキュメント データにアタッチする」を参照してください。