Partilhar via


Passo a passo: Adicionando recursos para um Editor personalizado

Depois de criar um editor personalizado, você pode adicionar mais recursos a ela.

Para criar um editor para VSPackage

  1. Crie um editor personalizado usando o modelo de projeto do pacote de Visual Studio.

    Para obter mais informações, consulte Passo a passo: Criando um comando de Menu usando o modelo de pacote de Visual Studio.

  2. Decida se deseja que o seu editor para suportar um modo de exibição único ou vários modos de exibição.

    Um editor que ofereça suporte a Nova janela de comando, ou possui formulário e exibição de código, requer que os objetos de dados de documento separado e objetos de exibição do documento. Em um editor que suporta apenas um modo de exibição, o objeto de dados do documento e o objeto de exibição do documento podem ser implementados no mesmo objeto.

    Para obter um exemplo de vários modos de exibição, consulte Suporte a vários modos de exibição de documento.

  3. Implementar uma fábrica de editor, Implementando o IVsEditorFactory interface.

    Para obter mais informações, consulte Fábricas de editor.

  4. Decida se deseja que o seu editor para usar a ativação in-loco ou incorporação simplificada para gerenciar a janela de objeto de exibição do documento.

    Uma janela do editor de incorporação simplificado hospeda um modo de exibição de documento padrão, enquanto uma janela do editor de ativação in-loco hospeda um controle de ActiveX ou outro objeto ativo como seu modo de exibição do documento. Para obter mais informações, consulte A incorporação de simplificado e Ativação in-loco.

  5. Implementar a IOleCommandTarget interface para manipular os comandos.

  6. Fornecem persistência de documento e a resposta às alterações de arquivo externo, fazendo o seguinte:

    1. Para manter o arquivo, implementar IVsPersistDocData2 e IPersistFileFormat no objeto de dados de documento do seu editor.

    2. Para responder a alterações de arquivo externo, implementar IVsFileChangeEx e IVsDocDataFileChangeControl no objeto de dados de documento do seu editor.

      Dica

      Chame QueryService na SVsFileChangeEx para obter um ponteiro para IVsFileChangeEx.

  7. Coordene eventos de edição de documentos com controle de código fonte. Para fazer isso:

    1. Obter um ponteiro para IVsQueryEditQuerySave2 chamando QueryService na SVsQueryEditQuerySave.

    2. Quando o primeiro evento de edição ocorre, chame o QueryEditFiles método.

      Isso pede ao usuário para check-out do arquivo se ele não já foi extraído. Certifique-se lidar com uma condição de "arquivo não foi checked out" para evitar erros

    3. Da mesma forma, antes de salvar o arquivo, chamar o QuerySaveFile método.

      Este método solicita ao usuário para salvar o arquivo se não tiver sido salvo ou se ele foi alterado desde o último salvamento.

  8. Habilitar o Propriedades janela para exibir as propriedades de texto selecionado no editor. Para fazer isso:

    1. Chame OnSelectChange cada seleção de texto tempo altera, passando em sua implementação de ISelectionContainer.

    2. Chame QueryService na STrackSelection o serviço para obter um ponteiro para ITrackSelection.

  9. Permitir que os usuários arrastar e soltar itens entre o editor e o caixa de ferramentas, ou entre editores externos (como o Microsoft Word) e o caixa de ferramentas. Para fazer isso:

    1. Implementar IDropTarget em seu editor de IDE de alerta que o seu editor é um destino de soltura.

    2. Implementar a IVsToolboxUser interface no modo de exibição para que o editor pode habilitar e desabilitar a itens na caixa de ferramentas.

    3. Implementar ResetDefaults e chame QueryService na SVsToolbox o serviço para obter um ponteiro para o IVsToolbox2 e IVsToolbox3 interfaces.

      Isso permite que o VSPackage adicionar novos itens para o caixa de ferramentas.

  10. Decida se deseja algum recurso opcional para o seu editor.

    • Se você desejar que o seu editor para oferecer suporte a localizar e substituir os comandos, implementar IVsFindTarget.

    • Se desejar que o seu editor para oferecer suporte a gravação de macros, chame QueryService para SVsMacroRecorder para obter um ponteiro para IVsMacroRecorder.

      Dica

      O IDE suporta gravação quando o editor oferece suporte de macro.

    • Se você quiser usar uma janela de ferramenta de estrutura de tópicos do documento em seu editor, implementar IVsDocOutlineProvider.

    • Se você quiser usar uma barra de status no seu editor, implementar IVsStatusbarUser e chame QueryService para SVsStatusbar para obter um ponteiro para IVsStatusBar.

      Por exemplo, um editor pode exibir a linha / informações de coluna, o modo de seleção (fluxo de caixa /) e o modo de inserção (Inserir / /overstrike).

    • Se você desejar que o seu editor para oferecer suporte a Undo de comando, o método recomendado é usar o modelo de Gerenciador de desfazer OLE. Como alternativa, você pode ter a alça do editor do Undo comando diretamente.

  11. Crie um registro de informações, incluindo os GUIDs para o VSPackage, os menus, o editor e outros recursos.

    Este é um exemplo genérico de código seria colocar no seu script de arquivo. rgs para demonstrar como registrar adequadamente um editor.

    NoRemove Editors
    {
          ForceRemove {...guidEditor...} = s 'RTF Editor'
          {
             val Package = s '{...guidVsPackage...}'
             ForceRemove Extensions
             {
                val rtf = d 50
             }
          }
    }
    NoRemove Menus
    {
          val {...guidVsPackage...} = s ',203,11'
    }
    
  12. Implemente o suporte de ajuda sensível ao contexto.

    Isso permite que você fornecer suportam de Ajuda F1 e a janela da Ajuda dinâmica para itens em seu editor. Para obter mais informações sobre esse assunto, consulte Como: fornecer contexto para editores.

  13. Expor um modelo de objeto de automação do seu editor, Implementando o IDispatch interface.

    Para obter mais informações, consulte Contribuindo para o modelo de automação.

Programação robusta

  • A instância do editor é criada quando o IDE chama o CreateEditorInstance método. Se o editor suporta vários modos de exibição CreateEditorInstance cria os objetos de exibição do documento e os dados do documento. Se o objeto de dados do documento já está aberto, não-nulo punkDocDataExisting valor é passado para IVsEditorFactory::CreateEditorInstance. A implementação de fábrica do editor deve determinar se um objeto de dados de documento existente é compatível, consultando as interfaces apropriadas nele. Para obter mais informações, consulte Suporte a vários modos de exibição de documento.

  • Se você usar a abordagem simplificada de incorporação, implementar a IVsWindowPane interface.

  • Se você decidir usar a ativação in-loco, implemente as seguintes interfaces:

    IOleObject

    IOleInPlaceActiveObject

    IOleInPlaceComponent

    Dica

    O IOleInPlaceComponent interface é usada para evitar a mesclagem de menus OLE 2.

    O IOleCommandTarget implementação controla os comandos, como Recortar, Copy, e Colar. Ao implementar IOleCommandTarget, decida se o seu editor requer seu próprio arquivo de .vsct para definir sua própria estrutura de comando de menu ou se ele poderá implementar comandos padrão definidos pela Visual Studio. Normalmente, editores de usam e estendem os menus do IDE e definem suas próprias barras de ferramentas. No entanto, muitas vezes é necessário para um editor definir seus próprios comandos específicos, além de ser usado um conjunto de comando padrão do IDE. Para fazer isso, o editor deve declarar os comandos padrão, ele usa e, em seguida, definir quaisquer novos comandos, menus de contexto, barras de ferramentas e menus de nível superior em um arquivo de .vsct. Se você criar uma ativação in-loco editor, implementar IOleInPlaceComponent e definir os menus e barras de ferramentas para o editor em um arquivo de .vsct em vez de usar a mesclagem de menus OLE 2.

  • Para evitar que o comando de menu lotado na interface de usuário, você deve usar os comandos existentes no IDE antes da criação de novos comandos. Os comandos compartilhados são definidos no SharedCmdDef.vsct e ShellCmdDef.vsct. Esses arquivos são instalados por padrão no subdiretório VisualStudioIntegration\Common\Inc do seu SDK do Visual Studio instalação.

  • ISelectionContainerpode expressar única e de várias seleções. Cada objeto selecionado é implementado como um IDispatch objeto.

  • O IDE implementa IOleUndoManager como um serviço acessível a partir de um CreateInstance ou como um objeto que pode ser instanciado por meio de CreateInstance. Implementa a editor do IOleUndoUnit interface para cada Undo ação.

  • Há dois lugares um editor personalizado pode expor objetos de automação:

    • Document.Object

    • Window.Object

Consulte também

Tarefas

Como: fornecer contexto para editores

Outros recursos

Contribuindo para o modelo de automação