エディター用に個別のドキュメント データとドキュメント ビュー オブジェクトを作成することで、1 つのドキュメントの複数のビューを提供できます。 追加のドキュメント ビューが役に立つ場合があります。
新しいウィンドウのサポート: エディターで既にウィンドウを開いているユーザーが [ウィンドウ] メニューから [新しいウィンドウ] コマンドを選択して新しいウィンドウを開くことができるように、エディターで同じ種類の 2 つ以上のビューを提供する必要があります。
フォームとコード ビューのサポート: エディターでさまざまな種類のビューを提供する必要があります。 たとえば、Visual Basic では、フォーム ビューとコード ビューの両方が提供されます。
詳細については、Visual Studio パッケージ テンプレートによって作成されたカスタム エディター プロジェクトのEditorFactory.cs ファイルの CreateEditorInstance プロシージャを参照してください。 このプロジェクトの詳細については、「 チュートリアル: カスタム エディターの作成」を参照してください。
ビューの同期
複数のビューを実装する場合、ドキュメント データ オブジェクトは、すべてのビューをデータと同期する役割を担います。 VsTextBufferのイベント処理インターフェイスを使用して、複数のビューをデータと同期できます。
VsTextBuffer オブジェクトを使用して複数のビューを同期しない場合は、ドキュメント データ オブジェクトに加えられた変更を処理する独自のイベント システムを実装する必要があります。 さまざまなレベルの細分性を使用して、複数のビューを最新の状態に保つことができます。 最大粒度の設定では、1 つのビューを入力すると、他のビューがすぐに更新されます。 最小粒度では、他のビューはアクティブになるまで更新されません。
ドキュメント データが既に開いているかどうかを判断する
次の図に示すように、統合開発環境 (IDE) の実行中のドキュメント テーブル (RDT) は、ドキュメントのデータが既に開いているかどうかを追跡するのに役立ちます。
複数のビュー
既定では、各ビュー (ドキュメント ビュー オブジェクト) は、独自のウィンドウ フレーム (IVsWindowFrame) に含まれています。 ただし、既に記載したように、ドキュメント データは複数のビューに表示できます。 これを有効にするために、Visual Studio は RDT をチェックして、対象のドキュメントがエディターで既に開かれているかどうかを判断します。 IDE が CreateEditorInstance を呼び出してエディターを作成すると、 punkDocDataExisting パラメーターで返される NULL 以外の値は、ドキュメントが既に別のエディターで開かれていることを示します。 RDT の機能の詳細については、「 ドキュメント テーブルの実行」を参照してください。
IVsEditorFactory実装で、punkDocDataExistingで返されたドキュメント データ オブジェクトを調べて、ドキュメント データがエディターに適しているかどうかを判断します。 (たとえば、HTML エディターでは HTML データのみを表示する必要があります)。適切な場合は、エディター ファクトリでデータの 2 つ目のビューを提供する必要があります。
punkDocDataExisting パラメーターがNULLされていない場合は、ドキュメント データ オブジェクトが別のエディターで開かれているか、ドキュメント データが同じエディターを使用して別のビューで既に開かれている可能性があります。 ドキュメント データがエディター ファクトリでサポートされていない別のエディターで開いている場合、Visual Studio はエディター ファクトリを開きません。 詳細については、「 方法: ビューをドキュメント データにアタッチする」を参照してください。