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
Implementar CreateEditorInstance.
Em sua implementação do , chame
QueryInterface
o objeto de dados deIVsEditorFactory::CreateEditorInstance
documento existente quando o IDE chamar suaCreateEditorInstance
implementação.A chamada
QueryInterface
permite examinar o objeto de dados do documento existente, que é especificado nopunkDocDataExisting
parâmetro.As interfaces exatas que você deve consultar, no entanto, dependem do editor que está abrindo o documento, conforme descrito na etapa 4.
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.
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
IVsPersistFileFormat
o , que herda do IPersist. Assim, você pode chamarQueryInterface
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.