Compartilhar via


Algoritmo de roteamento de comando

Nos comandos do Visual Studio, são tratados por vários componentes diferentes. Os comandos são roteados do contexto mais interno, que se baseiam na seleção atual, para o contexto mais externo (também conhecido como global). Para obter mais informações, consulte a disponibilidade do comando.

Ordem de resolução de comando

Os comandos são passados pelos seguintes níveis de contexto de comando:

  1. Suplementos: O ambiente primeiro oferece o comando a qualquer suplemento presente.

  2. Comandos de prioridade: esses comandos são registrados usando IVsRegisterPriorityCommandTarget. Eles são chamados para todos os comandos no Visual Studio e são chamados na ordem em que foram registrados.

  3. Comandos de menu de contexto: um comando localizado em um menu de contexto é oferecido primeiro para o destino de comando fornecido para o menu de contexto e depois para o roteamento típico.

  4. Destinos de comando do conjunto de barras de ferramentas: esses destinos de comando são registrados quando você chama SetupToolbar2. O pCmdTarget parâmetro pode ser null. Se não estiver null, esse alvo do comando será usado para atualizar os comandos localizados na barra de ferramentas que você está configurando. Se o shell estiver configurando sua barra de ferramentas, passará o quadro da janela como o pCmdTarget, de forma que todas as atualizações dos comandos na barra de ferramentas fluam pelo quadro da janela, mesmo quando este não estiver em foco.

  5. Janela de ferramentas: as janelas de ferramentas, que normalmente implementam a IVsWindowPane interface, também devem implementar a IOleCommandTarget interface para que o Visual Studio possa obter o destino de comando quando a janela de ferramentas for a janela ativa. No entanto, se a janela de ferramentas que tem foco for a janela projeto , o comando será roteado para a IVsUIHierarchy interface que é o pai comum dos itens selecionados. Se essa seleção abranger vários projetos, o comando será roteado para a IVsSolution hierarquia. A interface IVsUIHierarchy contém os métodos QueryStatusCommand e ExecCommand, que são análogos aos comandos correspondentes na interface IOleCommandTarget.

  6. Janela do documento: se o comando tiver o RouteToDocs sinalizador configurado em seu arquivo .vsct, o Visual Studio procurará um alvo do comando no objeto de visualização do documento, que é uma instância da interface IVsWindowPane ou uma instância do objeto de documento (geralmente a interface IVsTextLines ou a interface IVsTextBuffer). Se o objeto de exibição de documento não der suporte ao comando, o Visual Studio roteia o comando para a IOleCommandTarget interface retornada. (Esta é uma interface opcional para objetos de dados de documento.)

  7. Hierarquia atual: a hierarquia atual pode ser o projeto que possui a janela do documento ativo ou a hierarquia selecionada no Gerenciador de Soluções. O Visual Studio procura a IOleCommandTarget interface implementada na hierarquia atual ou ativa. A hierarquia deve dar suporte a comandos válidos sempre que a hierarquia estiver ativa, mesmo que uma janela de documento de um item de projeto tenha foco. No entanto, os comandos que se aplicam somente quando o Gerenciador de Soluções tem foco devem ter suporte usando a interface e seus IVsUIHierarchyQueryStatusCommandExecCommand métodos.

    Os comandos Recortar, Copiar, Colar, Excluir, Renomear, Inserir e DoubleClick exigem tratamento especial. Para obter informações sobre como lidar com comandos Delete e Remove em hierarquias, consulte a IVsHierarchyDeleteHandler interface.

  8. Global: Se um comando não tiver sido tratado pelos contextos mencionados anteriormente, o Visual Studio tentará roteá-lo para o VSPackage que possui um comando que implementa a IOleCommandTarget interface. Se o VSPackage ainda não tiver sido carregado, ele não será carregado quando o Visual Studio chamar o QueryStatus método. O VSPackage é carregado somente quando o Exec método é chamado.