Compartilhar via


Anexar modos de exibição a dados do documento

Se você tiver um novo modo de exibição de documento, poderá anexá-lo a um objeto de dados de documento existente.

Para determinar se você pode anexar um modo de exibição a um objeto de dados de documento existente

  1. Implementar CreateEditorInstance.

  2. Em sua implementação do , chame QueryInterface o objeto de dados de IVsEditorFactory::CreateEditorInstancedocumento existente quando o IDE chamar sua CreateEditorInstance implementação.

    A chamada QueryInterface permite examinar o objeto de dados do documento existente, que é especificado no punkDocDataExisting parâmetro.

    As interfaces exatas que você deve consultar, no entanto, dependem do editor que está abrindo o documento, conforme descrito na etapa 4.

  3. Se você não encontrar as interfaces apropriadas no objeto de dados de documento existente, retorne um código de erro ao editor indicando que o objeto de dados do documento é incompatível com o editor.

    Na implementação do IDE do , uma caixa de OpenStandardEditormensagem notifica que o documento está aberto em outro editor e pergunta se você deseja fechá-lo.

  4. Se você fechar este documento, o Visual Studio chamará a fábrica do editor pela segunda vez. Nessa chamada, o DocDataExisting parâmetro é igual a NULL. A implementação de fábrica do editor pode abrir o objeto de dados do documento em seu próprio editor.

    Observação

    Para determinar se você pode trabalhar com um objeto de dados de documento existente, você também pode usar o conhecimento privado da implementação de interface convertendo um ponteiro para a classe real do Visual C++ de sua implementação privada. Por exemplo, todos os editores padrão implementam IVsPersistFileFormato , que herda do IPersist. Assim, você pode chamar QueryInterface GetClassIDpor , e se a ID de classe no objeto de dados de documento existente corresponder à ID de classe da sua implementação, você poderá trabalhar com o objeto de dados de documento.

Programação robusta

Quando o Visual Studio chama sua implementação do método, ele passa de volta um ponteiro para o CreateEditorInstance objeto de dados de documento existente no punkDocDataExisting parâmetro, se houver. Examine o objeto de dados do documento retornado punkDocDataExisting para determinar se o objeto de dados do documento é apropriado para seu editor, conforme descrito na nota na etapa 4 do procedimento neste tópico. Se for apropriado, a fábrica do editor deve fornecer uma segunda exibição para os dados, conforme descrito em Suporte a várias exibições de documentos. Caso contrário, ele deve exibir uma mensagem de erro apropriada.