Algoritmo de roteamento de comando
No Visual Studio, os comandos são manipulados por vários componentes diferentes. Os comandos são roteados do contexto mais interno, que se baseia na seleção atual, para o contexto mais externo (também conhecido como global). Para obter mais informações, consulte Disponibilidade de comandos.
Resolução da ordem de comando
Os comandos são passados pelos seguintes níveis de contexto de comando:
Suplementos: O ambiente primeiro oferece o comando para todos os suplementos presentes.
Comandos de prioridade: esses comandos são registrados usando IVsRegisterPriorityCommandTargeto . Eles são chamados para cada comando no Visual Studio e são chamados na ordem em que foram registrados.
Comandos de menu de contexto: um comando localizado em um menu de contexto é oferecido primeiro ao destino do comando fornecido ao menu de contexto e, depois, ao roteamento típico.
Barra de ferramentas definir destinos de comando: esses destinos de comando são registrados quando você chama SetupToolbar2. O
pCmdTarget
parâmetro pode sernull
. Se nãonull
for , esse destino de comando será usado para atualizar quaisquer comandos localizados na barra de ferramentas que você está configurando. Se o shell estiver configurando sua barra de ferramentas, ele passará o quadro da janela como opCmdTarget
para que todas as atualizações dos comandos na barra de ferramentas fluam através do quadro da janela, mesmo quando ele não está em foco.Janela de ferramenta: As janelas de ferramentas, que normalmente implementam a interface, também devem implementar a interface para que o Visual Studio possa obter o destino de comando quando a janela de ferramenta for a IVsWindowPane IOleCommandTarget janela ativa. No entanto, se a janela de ferramenta 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 IVsUIHierarchy interface contém os QueryStatusCommand métodos e ExecCommand que são análogos aos comandos correspondentes na IOleCommandTarget interface.
Janela Documento: Se o comando tiver o sinalizador definido em seu arquivo .vsct, o
RouteToDocs
Visual Studio procurará um destino de comando no objeto de exibição de documento, que é uma instância de uma interface ou uma instância de um objeto de documento (normalmente uma interface ou uma IVsWindowPane IVsTextLines IVsTextBuffer interface). Se o objeto de exibição de documento não oferecer suporte ao comando, o Visual Studio roteia o comando para a IOleCommandTarget interface retornada. (Esta é uma interface opcional para objetos de dados do documento.)Hierarquia atual: a hierarquia atual pode ser o projeto que possui a janela de documento ativa ou a hierarquia selecionada no Gerenciador de Soluções. O Visual Studio procura a IOleCommandTarget interface que é implementada na hierarquia atual ou ativa. A hierarquia deve oferecer suporte a comandos que são válidos sempre que a hierarquia estiver ativa, mesmo se uma janela de documento de um item de projeto tiver foco. No entanto, os comandos que se aplicam somente quando o Gerenciador de Soluções tem foco devem ter suporte usando a IVsUIHierarchy interface e seus QueryStatusCommand ExecCommand métodos.
Os comandos Recortar, Copiar, Colar, Excluir, Renomear, Enter e DoubleClick exigem tratamento especial. Para obter informações sobre como manipular comandos Excluir e Remover em hierarquias, consulte a IVsHierarchyDeleteHandler interface.
Global: Se um comando não tiver sido manipulado 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 chama o QueryStatus método. O VSPackage é carregado somente quando o Exec método é chamado.