Partilhar via


Dando suporte a várias exibições de documento

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

  • Suporte a novas janelas: 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 a exibições de formulário e código: você deseja que o editor forneça exibições de diferentes tipos. O Visual Basic, por exemplo, fornece um modo de exibição Formulário e um modo de exibição Código.

    Para obter mais informações sobre isso, confira o procedimento CreateEditorInstance no arquivo EditorFactory.cs no projeto de editor personalizado criado pelo modelo de pacote do Visual Studio. Para obter mais informações sobre esse projeto, confira Passo a passo: Criar um editor personalizado.

Sincronizar exibições

Ao implementar 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 manipulação de eventos no VsTextBuffer para sincronizar várias exibições com os dados.

Caso não use o objeto VsTextBuffer para sincronizar várias exibições, você deve implementar seu próprio sistema de eventos e manipular as alterações feitas no objeto de dados do documento. Você pode usar diferentes níveis de granularidade para manter várias exibições atualizadas. Com uma configuração de granularidade máxima, à medida que você digita em uma exibição, as outras são atualizadas imediatamente. Com granularidade mínima, outras exibições não são atualizadas até que sejam ativadas.

Como determinar se os dados do documento já estão abertos

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

Gráfico DocDataView

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). No entanto, como já foi observado, 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 NULO retornado no parâmetro punkDocDataExisting indica que o documento já está aberto em outro editor. Para obter mais informações sobre como o RDT funciona, confira Tabela de documento em execução.

Na implementação de IVsEditorFactory, examine o objeto de dados do documento retornado em punkDocDataExisting para determinar se os dados do documento são apropriados para o seu editor. (Por exemplo, somente dados HTML devem ser exibidos por um editor de HTML.) Se for apropriado, o alocador do editor deve fornecer uma segunda exibição para os dados. Se o parâmetro punkDocDataExisting não for 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 com o mesmo editor. Se os dados do documento estiverem abertos em um editor diferente sem suporte do alocador do editor, o Visual Studio não consegue abrir o alocador do editor. Para obter mais informações, confira Instruções: Anexar modos de exibição a dados do documento.