Befehls-Routing-Algorithmus
In Visual Studio werden Befehle von mehreren unterschiedlichen Komponenten behandelt. Befehle werden aus dem innersten Kontext, der auf Grundlage der aktuellen Auswahl ist, zum äußersten (auch globalen Kontext) weitergeleitet. Weitere Informationen finden Sie unter Befehls-Verfügbarkeit.
Reihenfolge der Befehls-Auflösung
Befehle werden von den folgenden Auftragsniveaus Kontext übergeben:
Add-Ins: Die Umgebung ermöglicht allen Add-Ins zuerst den Befehl an, der vorhanden sind.
Befehle Priorität: Diese Befehle werden registriert, indem IVsRegisterPriorityCommandTargetverwendet. Sie sind für jeden Befehl in Visual Studio aufgerufen und werden in der Reihenfolge aufgerufen, in der sie registriert wurden.
Kontextmenü die Befehle: Ein Befehl in einem Kontextmenü wird zuerst das Befehlsziel bereitgestellt, das dem Kontextmenü bereitgestellt wird, und anschließend das dem typischen Routing.
Festgelegte auf der Symbolleiste Befehle: Diese Befehls Ziele werden registriert, wenn Sie SetupToolbar2aufrufen. Der pCmdTarget-Parameter kann null sein. Wenn dies nicht nullist, wird das Befehlsziel verwendet, um alle ausstehenden Befehle auf der Symbolleiste zu aktualisieren, die Sie installieren. Wenn die Shell die Symbolleiste installiert, führt sie den Fensterrahmen als pCmdTarget , sodass alle Aktualisierungen an Befehle auf der Symbolleiste den Fensterrahmen übermittelten, auch wenn es nicht im Fokus ist.
Toolfenster: Toolfenster, die in der Regel die IVsWindowPane-Schnittstelle implementieren, sind die IOleCommandTarget auch Schnittstelle implementieren, damit Visual Studio das Befehlsziel abrufen kann, wenn das Toolfenster das aktive Fenster ist. Wenn jedoch das Toolfenster, das den Fokus besitzt, das Projekt Fenster ist, gibt der Befehl wird auf die IVsUIHierarchy-Schnittstelle weitergeleitet, die das gemeinsame übergeordnete Element ausgewählter Elemente. Wenn diese Auswahl mehrerer Projekte umfasst, wird der Befehl zur IVsSolution Hierarchie weitergeleitet. Die IVsUIHierarchy-Schnittstelle enthält das QueryStatusCommand und die ExecCommand-Methode, die den entsprechenden Befehlen in der IOleCommandTarget-Schnittstelle analog sind.
Dokumentfenster: Wenn der Befehl das RouteToDocs-Flag verfügt, das in seiner .vsct-Datei festgelegt ist, sucht nach einem Visual Studio für das Befehlsziel die Dokumente Objekt, das eine Instanz einer IVsWindowPane-Schnittstelle oder eine Instanz eines Dokumentobjekts ist (meist eine Schnittstelle oder IVsTextLinesIVsTextBuffer-Schnittstelle). Wenn das Objekt die Dokumente nicht den Befehl unterstützt, leitet Visual Studio den Befehl zur IOleCommandTarget-Schnittstelle weiter, die zurückgegeben wird. (Dies ist eine optionale Schnittstelle für Dokumente datenobjekte).
Aktuelle Hierarchie: Die aktuelle Hierarchie kann das Projekt handeln, das das aktive Dokumentfenster oder die Hierarchie besitzt, die in Projektmappen-Explorerausgewählt ist. Visual Studio findet nach der IOleCommandTarget-Schnittstelle, die auf dem aktuellen Implementierung oder Aktiv, Hierarchie. Die Hierarchie sollte Befehle unterstützen, die gültig sind, wenn die Hierarchie aktiv ist, selbst wenn ein Dokumentfenster eines Projektelements den Fokus besitzt. Allerdings müssen Befehle gelten nur, wenn Projektmappen-Explorer den Fokus hat, unterstützt werden, indem die IVsUIHierarchy-Schnittstelle und deren QueryStatusCommand und ExecCommandMethoden.
Ausschneiden, Kopieren, Einfügen, Löschen, Umbenennen, Eingabeund Befehle DoubleClick besondere Behandlung erfordern. Informationen dazu, wie Löschen und Entfernen Befehle in den Hierarchien finden Sie in der IVsHierarchyDeleteHandler-Schnittstelle behandelt.
Global: Wenn ein Befehl nicht von der zuvor erwähnten Kontexte behandelt wurde, versucht Visual Studio, ihn zu VSPackages weiterzuleiten, der einen Befehl besitzt, der die IOleCommandTarget-Schnittstelle implementiert. Wenn ein VSPackage noch nicht geladen wurde, wird es nicht geladen, wenn Visual Studio die QueryStatus-Methode aufgerufen wird. VSPackages geladen wurde, nur dann, wenn die Exec-Methode aufgerufen wird.