Determinar qual editor abre um arquivo em um projeto
Quando um usuário abre um arquivo em um projeto, o ambiente passa por um processo de sondagem, eventualmente abrindo o editor ou designer apropriado para esse arquivo. O procedimento inicial empregado pelo ambiente é o mesmo para editores padrão e personalizados. O ambiente usa uma variedade de critérios ao sondar qual editor usar para abrir um arquivo e o VSPackage deve coordenar com o ambiente durante esse processo.
Por exemplo, quando um usuário seleciona o comando Abrir no menu Arquivo e, em seguida, escolhe nome de arquivo.rtf (ou qualquer outro arquivo com uma extensão .rtf), o ambiente chama a IsDocumentInProject implementação para cada projeto, eventualmente percorrendo todas as instâncias do projeto na solução. Os projetos retornam um conjunto de sinalizadores que identificam declarações em um documento por prioridade. Usando a prioridade mais alta, o ambiente chama o método apropriado OpenItem . Para obter mais informações sobre o processo de sondagem, consulte Adicionar modelos de projeto e item de projeto.
O projeto Arquivos diversos reivindica todos os arquivos que não são reivindicados por outros projetos. Dessa forma, os editores personalizados podem abrir documentos antes que os editores padrão os abram. Se um projeto Arquivos diversos reivindicar um arquivo, o ambiente chamará o método para abrir o OpenStandardEditor arquivo com um editor padrão. O ambiente verifica sua lista interna de editores registrados para um que lida com arquivos .rtf . Essa lista está localizada no registro na seguinte chave:
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\version\Editors\editor factory guid>\<<Extensions>
O ambiente também verifica os identificadores de classe na chave HKEY_CLASSES_ROOT\CLSID para quaisquer objetos que tenham uma subchave DocObject. Se a extensão de arquivo for encontrada lá, uma versão incorporada do aplicativo, como o Microsoft Word, será criada no local no Visual Studio. Esses objetos de documento devem ser arquivos compostos que implementam a interface ou o objeto deve implementar a IPersistStorage IPersistFileFormat interface.
Se não houver nenhuma fábrica de editores para arquivos .rtf no Registro, o ambiente procurará a chave HKEY_CLASSES_ROOT\.rtf e abrirá o editor especificado lá. Se a extensão do arquivo não for encontrada no HKEY_CLASSES_ROOT, o ambiente usará o editor de texto principal do Visual Studio para abrir o arquivo, se for um arquivo de texto.
Se o editor de texto principal falhar, o que ocorre se o arquivo não for um arquivo de texto, o ambiente usará seu editor binário para o arquivo.
Se o ambiente encontrar um editor para a extensão .rtf em seu registro, ele carregará o VSPackage que implementa essa fábrica de editores. O ambiente chama o SetSite método no novo VSPackage. O VSPackage chama QueryService
para SID_SVsRegistorEditor
, usando o método para registrar a fábrica do editor com o RegisterEditor ambiente.
O ambiente agora verifica novamente sua lista interna de editores registrados para encontrar a fábrica de editores recém-registrada para arquivos .rtf . O ambiente chama sua implementação do método, passando o nome do arquivo e o tipo de CreateEditorInstance exibição a serem criados.