Algoritmo de roteamento de comando
No Visual Studio os comandos são tratados por um número de diferentes componentes. Comandos são roteados do contexto mais interno, que é baseado na seleção atual, o contexto (também conhecido como global) mais externo. Para obter mais informações, consulte Disponibilidade de comando.
Ordem de resolução de comando
Comandos são passados para os seguintes níveis de contexto do comando:
Suplementos: O ambiente oferece primeiro o comando para quaisquer suplementos que estão presentes.
Comandos de prioridade: esses comandos são registrados usando IVsRegisterPriorityCommandTarget. Eles são chamados para todos os comandos Visual Studio e são chamados na ordem em que foram registrados.
Os comandos de menu de contexto: um comando localizado em um menu de contexto é oferecido pela primeira vez para o destino de comando que é fornecido ao menu de contexto e, depois disso, para o roteamento típica.
Barra de ferramentas definir metas de comando: esses destinos de comando são registrados quando você chamar SetupToolbar2. O pCmdTarget parâmetro pode ser null. Se não for null, e em seguida, o destino deste comando é usado para atualizar quaisquer comandos localizados na barra de ferramentas que você está configurando. Se o shell está configurando sua barra de ferramentas, ele passa a moldura da janela como a pCmdTarget para que todas as atualizações para os comandos no seu fluxo de barra de ferramentas através da moldura da janela, mesmo quando não está em foco.
Janela de ferramenta: Ferramenta windows, que normalmente implementam o IVsWindowPane interface, também deve implementar a IOleCommandTarget interface para que o Visual Studio possa obter seu destino quando a janela da ferramenta é a janela ativa. Entretanto, se a janela de ferramenta que tem foco é o projeto janela e, em seguida, o comando será roteado para o IVsUIHierarchy interface é o pai comum dos itens selecionados. Se esta seleção se estender por vários projetos, o comando será roteado para o IVsSolution hierarquia. O IVsUIHierarchy interface contém o QueryStatusCommand e ExecCommand métodos que são análogos aos comandos correspondentes a IOleCommandTarget interface.
Janela de documento: Se o comando tem o sinalizador RouteToDocs definido em seu arquivo de .vsct, Visual Studio procura um destino de comando no objeto de exibição do documento, que é uma instância de um IVsWindowPane interface ou uma instância de um objeto de documento (geralmente um IVsTextLines interface ou um IVsTextBuffer interface). Se o objeto de exibição do documento não oferece suporte para o comando, Visual Studio roteia o comando para o IOleCommandTarget interface é retornado. (Isso é uma interface opcional para os objetos de dados de documento).
Hierarquia atual: A hierarquia atual pode ser o que é proprietária da janela de documento ativo ou a hierarquia selecionada no projeto Solution Explorer. Procura de Visual Studio a IOleCommandTarget interface implementada na hierarquia atual ou ativa. A hierarquia deve oferecer suporte a comandos que são válidos, sempre que a hierarquia está ativa, mesmo se uma janela de documento de um item de projeto tem o foco. Entretanto, comandos que se aplicam somente quando Solution Explorer tem foco deve ser suportado usando o IVsUIHierarchy interface e sua QueryStatusCommand e ExecCommandmétodos.
Recortar, Copy, Colar, Excluir, Renomear, Enter, e DoubleClick comandos exigem tratamento especial. Para obter informações sobre como lidar com Excluir e Remover comandos em hierarquias, consulte o IVsHierarchyDeleteHandler interface.
Global: Se um comando não foi manipulado pelos contextos mencionados anteriormente, Visual Studio tenta encaminhá-lo para o VSPackage que possui um comando que implementa o IOleCommandTarget interface. Se o VSPackage já não foi 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.