Algoritmo de enrutamiento de comandos
En los comandos de Visual Studio administra varios componentes. Distribuyen a los comandos de contexto más interno, que se basa en la selección actual, (también conocido como global) al contexto más externo. Para obtener más información, vea Disponibilidad del comando.
Orden de resolución de comando
Pasan a los comandos a través de los niveles siguientes de contexto de comando:
los complementos: El entorno primero proporciona el comando a cualquier complemento que está presente.
Comandos de prioridad: Registran a estos comandos mediante IVsRegisterPriorityCommandTarget. Se llama para cada comando en Visual Studio, y se llama en el orden en que se registraron.
comandos de menú contextual: Proporcionan un comando ubicado en un menú contextual primero al destino del comando que se proporciona al menú contextual y, a continuación que el enrutamiento estándar.
Destinos concretos de comando de la barra de herramientas: Se registran estos destinos de comando cuando se llama a SetupToolbar2. El valor del parámetro pCmdTarget puede ser null. Si no es null, este destino de comando se utiliza para actualizar cualquier comando situado en la barra de herramientas que está configurando. Si el shell coloca la barra de herramientas, pasa el marco de la ventana como pCmdTarget de modo que todas las actualizaciones a los comandos de la barra de herramientas atraviesen el marco de la ventana, aunque no esté en el foco.
ventana de herramientas: Las ventanas de herramientas, que implementan normalmente la interfaz de IVsWindowPane , también deben implementar la interfaz de IOleCommandTarget para poder obtener el destino de comando cuando la ventana de herramientas es la ventana activa. Sin embargo, si la ventana de herramientas que tiene el foco es la ventana de proyecto , el comando se enruta a la interfaz de IVsUIHierarchy que es el elemento primario común de los elementos seleccionados. Si esta selección abarca varios proyectos, enrutan al comando en la jerarquía de IVsSolution . La interfaz de IVsUIHierarchy contiene el QueryStatusCommand y los métodos de ExecCommand que son análogos a los comandos correspondientes en la interfaz de IOleCommandTarget .
ventana de documento: Si el comando hace el indicador de RouteToDocs establecer en el archivo de .vsct, Visual Studio busca un destino de comando en el objeto de vista del documento, que es una instancia de una interfaz de IVsWindowPane o una instancia de un objeto de documento (normalmente una interfaz de IVsTextLines o una interfaz de IVsTextBuffer ). Si el objeto de vista del documento no admite el comando, Visual Studio distribuye el comando a la interfaz de IOleCommandTarget que se devuelve. (Esto es una interfaz opcional para los objetos de datos del documento).
jerarquía actual: La jerarquía actual puede ser el proyecto que posee la ventana de documento activo o la jerarquía que se seleccione en Explorador de soluciones. Visual Studio busca la interfaz de IOleCommandTarget que se implementa en la actual, o el activo, jerarquía. La jerarquía debe admitir los comandos que son válidos siempre que la jerarquía está activa, aunque una ventana de documento de un elemento de proyecto tiene el foco. Sin embargo, los comandos que aplican sólo cuando Explorador de soluciones tiene el foco deben ser compatibles con la interfaz de IVsUIHierarchy y su QueryStatusCommand y métodos dede ExecCommand.
Los comandos deCortar, de Copiar, de Pegar, de Eliminar, de Cambiar nombre, de Entrar, y de Haga doble clic en requieren un tratamiento especial. Para obtener información sobre cómo controlar los comandos de Eliminar y de Quitar en jerarquías, vea la interfaz de IVsHierarchyDeleteHandler .
global: Si los contextos mencionados anteriormente no ha controlado a un comando, Visual Studio intenta distribuirlo al Paquete que posee un comando que implemente la interfaz de IOleCommandTarget . Si el Paquete no ha cargado ya, no se carga cuando Visual Studio llama al método de QueryStatus . El paquete VSPackage sólo se carga cuando se llama al método de Exec .