Suporte a várias exibições de documento

Você pode fornecer mais de uma exibição de um documento criando dados de documento separados e objetos de exibição de documento para seu editor. Alguns casos em que uma exibição de documento adicional seria útil são:

  • Suporte à nova janela: você deseja que o editor forneça duas ou mais exibições do mesmo tipo, para que um usuário que já tenha uma janela aberta no editor possa abrir uma nova janela selecionando o comando Nova Janela no menu Janela .

  • Suporte à exibição de formulário e código: você deseja que o editor forneça exibições de diferentes tipos. O Visual Basic, por exemplo, fornece uma exibição de formulário e uma exibição de código.

    Para obter mais informações sobre isso, consulte o procedimento CreateEditorInstance no arquivo EditorFactory.cs no projeto do editor personalizado criado pelo Modelo de Pacote do Visual Studio. Para obter mais informações sobre este projeto, consulte Passo a passo: criando um editor personalizado.

Sincronizando exibições

Quando você implementa várias exibições, o objeto de dados do documento é responsável por manter todas as exibições sincronizadas com os dados. Você pode usar as interfaces de tratamento de eventos em VsTextBuffer para sincronizar várias exibições com os dados.

Se você não usar o VsTextBuffer objeto para sincronizar várias exibições, deverá implementar seu próprio sistema de eventos para lidar com as alterações feitas no objeto de dados do documento. Você pode usar diferentes níveis de granularidade para manter vários modos de exibição atualizados. Com uma configuração de granularidade máxima, conforme você digita em uma exibição, as outras exibições são atualizadas imediatamente. Com granularidade mínima, outras visões não são atualizadas até que sejam ativadas.

Determinando se os dados do documento já estão abertos

A tabela de documentos em execução (RDT) no IDE (ambiente de desenvolvimento integrado) ajuda a controlar se os dados de um documento já estão abertos, conforme mostrado no diagrama a seguir.

DocDataView graphic

Várias exibições

Por padrão, cada exibição (objeto de exibição de documento) está contida em seu próprio quadro de janela (IVsWindowFrame). Como já observado, no entanto, os dados do documento podem ser exibidos em várias exibições. Para habilitar isso, o Visual Studio verifica o RDT para determinar se o documento em questão já está aberto em um editor. Quando o IDE chama CreateEditorInstance para criar o editor, um valor não NULL retornado no punkDocDataExisting parâmetro indica que o documento já está aberto em outro editor. Para obter mais informações sobre como o RDT funciona, consulte Running Document Table.

Em sua IVsEditorFactory implementação, examine o objeto de dados do documento retornado punkDocDataExisting para determinar se os dados do documento são apropriados para o editor. (Por exemplo, somente dados HTML devem ser exibidos por um editor HTML.) Se for apropriado, o editor factory deverá fornecer uma segunda exibição para os dados. Se o parâmetro punkDocDataExisting não estiver NULL, é possível que o objeto de dados do documento esteja aberto em outro editor ou, mais provavelmente, que os dados do documento já estejam abertos em uma exibição diferente no mesmo editor. Se os dados do documento estiverem abertos em um editor diferente para o qual a fábrica de editores não oferece suporte, o Visual Studio não conseguirá abrir sua fábrica de editores. Para obter mais informações, consulte Como anexar exibições aos dados do documento.