Compartir a través de


Algoritmo de enrutamiento de comandos

En los comandos de Visual Studio se controlan mediante varios componentes diferentes. Los comandos se enrutan desde el contexto más interno, que está basado en la selección actual, al contexto más externo (también conocido como global). Para obtener más información, consulte Disponibilidad de comandos.

Orden de resolución de comandos

Los comandos se pasan a través de los siguientes niveles de contexto de comandos:

  1. Complementos: el entorno ofrece primero el comando a los complementos que están presentes.

  2. Comandos de prioridad: estos comandos se registran mediante IVsRegisterPriorityCommandTarget. Se llaman para cada comando de Visual Studio y se llaman en el orden en que se registraron.

  3. Comandos de menú contextual: primero se ofrece un comando ubicado en un menú contextual al destino de comandos que se proporciona al menú contextual y después al enrutamiento típico.

  4. Destinos de comando del conjunto de barras de herramientas: estos destinos de comando se registran cuando se llama a SetupToolbar2. El pCmdTarget parámetro puede ser null. Si no es null, este destino de comando se utiliza para actualizar cualquier comando ubicado en la barra de herramientas que está configurando. Si el shell está configurando la barra de herramientas, entonces pasa el marco de la ventana como el pCmdTarget, de manera que todas las actualizaciones de los comandos de la barra de herramientas fluyan a través del marco de la ventana, incluso cuando no está enfocado.

  5. Ventana de herramientas: las ventanas de herramientas, que normalmente implementan la IVsWindowPane interfaz, también deben implementar la IOleCommandTarget interfaz para que Visual Studio pueda obtener el destino del comando cuando la ventana de herramientas sea la ventana activa. Sin embargo, si la ventana de herramientas que tiene el foco es la ventana Proyecto, el comando se enruta a la IVsUIHierarchy interfaz que es el progenitor común de los elementos seleccionados. Si esta selección abarca varios proyectos, el comando se enruta a la IVsSolution jerarquía. La interfaz IVsUIHierarchy contiene los métodos QueryStatusCommand y ExecCommand, los cuales son análogos a los comandos correspondientes en la interfaz IOleCommandTarget.

  6. Ventana de documento: Si el comando tiene la marca RouteToDocs establecida en su archivo .vsct, Visual Studio busca un destino de comando en el objeto de la vista de documento, que es una instancia de una interfaz IVsWindowPane o una instancia de un objeto de documento (normalmente una interfaz IVsTextLines o una interfaz IVsTextBuffer). Si el objeto de vista de documento no admite el comando, Visual Studio enruta el comando a la IOleCommandTarget interfaz devuelta. (Se trata de una interfaz opcional para objetos de datos de documentos).

  7. Jerarquía actual: la jerarquía actual puede ser el proyecto que posee la ventana del documento activo o la jerarquía seleccionada en el Explorador de soluciones. Visual Studio busca la interfaz IOleCommandTarget que se implementa en la jerarquía corriente o activa. La jerarquía debe admitir comandos que sean válidos siempre que la jerarquía esté activa, incluso si una ventana de documento de un elemento de proyecto esté enfocada. Sin embargo, los comandos que se aplican solo cuando Explorador de Soluciones tiene el foco deben admitirse mediante la interfaz IVsUIHierarchy y sus métodos QueryStatusCommand y ExecCommand.

    Los comandos Cut, Copy, Paste, Delete, Rename, Enter y DoubleClick requieren un control especial. Para obtener información sobre cómo controlar los comandos Delete y Remove en jerarquías, consulte la IVsHierarchyDeleteHandler interfaz .

  8. Global: si un comando no se ha controlado por los contextos mencionados anteriormente, Visual Studio intenta enrutarlo al VSPackage que posee un comando que implementa la IOleCommandTarget interfaz. Si el VSPackage aún no se ha cargado, no se carga cuando Visual Studio llama al QueryStatus método . VsPackage solo se carga cuando se llama al Exec método .