Erstellen von VSCT-Dateien
Dieses Dokument zeigt, wie Sie eine VSCT-Datei erstellen, um der integrierten Entwicklungsumgebung (IDE) von Visual Studio Menüelemente, Symbolleisten und andere Benutzeroberflächenelemente hinzuzufügen. Führen Sie diese Schritte aus, wenn Sie einem Visual Studio-Paket (VSPackage) UI-Elemente hinzufügen, das noch nicht über eine VSCT-Datei verfügt.
Für neue Projekte wird empfohlen, die Visual Studio-Paketvorlage zu verwenden, da sie eine VSCT-Datei generiert, die je nach Auswahl bereits über die erforderlichen Elemente für einen Menübefehl, ein Toolfenster oder einen benutzerdefinierten Editor verfügt. Sie können diese VSCT-Datei ändern, um die Anforderungen Ihres VSPackage zu erfüllen. Weitere Informationen zum Ändern einer VSCT-Datei finden Sie in den Beispielen unter Erweitern von Menüs und Befehlen.
Erstellen der Datei
Erstellen Sie eine VSCT-Datei in diesen Phasen: Erstellen Sie die Struktur für Dateien und Ressourcen, deklarieren Sie die UI-Elemente, fügen Sie die UI-Elemente in die IDE ein, und fügen Sie spezielle Verhaltensweisen hinzu.
Dateistruktur
Die grundlegende Struktur einer VSCT-Datei ist ein CommandTable-Stammelement , das ein Commands-Element und ein Symbols-Element enthält.
So erstellen Sie die Dateistruktur
Fügen Sie Ihrem Projekt eine VSCT-Datei hinzu, indem Sie die Schritte in How to: Create a .vsct file.
Fügen Sie dem
CommandTable
Element die erforderlichen Namespaces hinzu, wie im folgenden Beispiel gezeigt:<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
Fügen Sie im
CommandTable
Element einCommands
Element hinzu, um alle benutzerdefinierten Menüs, Symbolleisten, Befehlsgruppen und Befehle zu hosten. Damit Ihre benutzerdefinierten UI-Elemente geladen werden können, muss dasCommands
Element seinPackage
Attribut auf den Namen des Pakets festgelegt haben.Fügen Sie nach dem
Commands
Element einSymbols
Element hinzu, um die GUIDs für das Paket sowie die Namen und Befehls-IDs für Ihre UI-Elemente zu definieren.
Einschließen von Visual Studio-Ressourcen
Verwenden Sie das Extern-Element , um auf die Dateien zuzugreifen, die Visual Studio-Befehle und die Menüs definieren, die zum Platzieren der UI-Elemente in der IDE erforderlich sind. Wenn Sie Außerhalb des Pakets definierte Befehle verwenden, verwenden Sie das UsedCommands-Element , um Visual Studio zu informieren.
So fügen Sie Visual Studio-Ressourcen ein
Fügen Sie oben im
CommandTable
Element einExtern
Element für jede externe Datei hinzu, auf die verwiesen werden soll, und legen Sie dashref
Attribut auf den Namen der Datei fest. Sie können auf die folgenden Headerdateien verweisen, um auf Visual Studio-Ressourcen zuzugreifen:Stdidcmd.h: Definiert IDs für alle Befehle, die von Visual Studio verfügbar gemacht werden.
Vsshlids.h: Enthält Befehls-IDs für Visual Studio-Menüs.
Wenn Ihr Paket Befehle aufruft, die von Visual Studio oder anderen Paketen definiert werden, fügen Sie nach dem
Commands
Element einUsedCommands
Element hinzu. Füllen Sie dieses Element mit einem UsedCommand-Element für jeden Befehl auf, den Sie aufrufen, der nicht Teil des Pakets ist. Legen Sie dieguid
Elemente undid
AttributeUsedCommand
auf die GUID- und ID-Werte der befehle fest, die aufgerufen werden sollen.Weitere Informationen zum Auffinden der GUIDs und IDs von Visual Studio-Befehlen finden Sie unter GUIDs und IDs von Visual Studio-Befehlen. Verwenden Sie zum Aufrufen von Befehlen aus anderen Paketen die GUID und die ID des Befehls, wie in der VSCT-Datei für diese Pakete definiert.
Deklarieren von UI-Elementen
Deklarieren Sie alle neuen UI-Elemente im Symbols
Abschnitt der VSCT-Datei .
So deklarieren Sie UI-Elemente
Fügen Sie im
Symbols
Element drei GuidSymbol-Elemente hinzu. JedesGuidSymbol
Element verfügt über einname
Attribut und einvalue
Attribut. Legen Sie dasname
Attribut so fest, dass es den Zweck des Elements widerspiegelt. Dasvalue
Attribut akzeptiert eine GUID. (Um eine GUID zu generieren, wählen Sie auf der Menü "Extras", wählen Sie "GUID erstellen" und dann "Registrierungsformat" aus.)Das erste
GuidSymbol
Element stellt Ihr Paket dar und hat in der Regel keine untergeordneten Elemente. Das zweiteGuidSymbol
Element stellt den Befehlssatz dar und enthält alle Symbole, die Menüs, Gruppen und Befehle definieren. Das dritteGuidSymbol
Element stellt Ihren Bildspeicher dar und enthält Symbole für alle Symbole für Ihre Befehle. Wenn Sie keine Befehle haben, die Symbole verwenden, können Sie das dritteGuidSymbol
Element weglassen.Fügen Sie im
GuidSymbol
Element, das Ihren Befehlssatz darstellt, ein oder mehrere IDSymbol-Elemente hinzu. Jede dieser Elemente stellt ein Menü, eine Symbolleiste, eine Gruppe oder einen Befehl dar, den Sie der Benutzeroberfläche hinzufügen.Legen Sie für jedes
IDSymbol
Element dasname
Attribut auf den Namen fest, den Sie verwenden, um auf das entsprechende Menü, die Entsprechende Gruppe oder den entsprechenden Befehl zu verweisen, und legen Sie dasvalue
Element dann auf eine hexadezimale Zahl fest, die die Befehls-ID darstellt. Keine zweiIDSymbol
Elemente mit demselben übergeordneten Element können denselben Wert aufweisen.Wenn eines ihrer UI-Elemente Symbole erfordert, fügen Sie dem Element, das Ihren Bildspeicher darstellt, ein
IDSymbol
Element für jedes Symbol hinzuGuidSymbol
.
Platzieren von UI-Elementen in der IDE
Die Elemente "Menüs", "Gruppen" und "Schaltflächen" enthalten die Definitionen für alle Menüs, Gruppen und Befehle, die in Ihrem Paket definiert sind. Platzieren Sie diese Menüs, Gruppen und Befehle entweder mithilfe eines übergeordneten Elements, das Teil der UI-Elementdefinition ist, oder mithilfe eines CommandPlacement-Elements , das an anderer Stelle definiert ist.
Jedes Element und Button
Group
jedes Menu
Element verfügt über ein guid
Attribut und ein id
Attribut. Legen Sie das guid
Attribut immer so fest, dass es dem Namen des GuidSymbol
Elements entspricht, das Ihren Befehlssatz darstellt, und legen Sie das id
Attribut auf den Namen des IDSymbol
Elements fest, das Das Menü, die Gruppe oder den Befehl im Symbols
Abschnitt darstellt.
So definieren Sie UI-Elemente
Wenn Sie neue Menüs, Untermenüs, Kontextmenüs oder Symbolleisten definieren, fügen Sie dem
Commands
Element einMenus
Element hinzu. Fügen Sie dann für jedes zu erstellende Menü demMenus
Element ein Menüelement hinzu.Legen Sie die
guid
Attribute desMenu
Elements festid
, und legen Sie dann dastype
Attribut auf die gewünschte Art von Menü fest. Sie können daspriority
Attribut auch so festlegen, dass die relative Position des Menüs in der übergeordneten Gruppe festgelegt wird.Hinweis
Das
priority
Attribut gilt nicht für Symbolleisten und Kontextmenüs.Alle Befehle in der Visual Studio-IDE müssen von Befehlsgruppen gehostet werden, bei denen es sich um die direkten untergeordneten Elemente von Menüs und Symbolleisten handelt. Wenn Sie der IDE neue Menüs oder Symbolleisten hinzufügen, müssen diese neue Befehlsgruppen enthalten. Sie können auch Befehlsgruppen zu vorhandenen Menüs und Symbolleisten hinzufügen, damit Sie Ihre Befehle visuell gruppieren können.
Wenn Sie neue Befehlsgruppen hinzufügen, müssen Sie zuerst ein
Groups
Element erstellen und dann ein Gruppenelement für jede Befehlsgruppe hinzufügen.Legen Sie die
guid
Attribute der einzelnenGroup
Elemente fest, und legen Sie dann daspriority
Attribut fest, um die relative Position der Gruppe im übergeordnetenid
Menü festzulegen. Weitere Informationen finden Sie unter Erstellen wiederverwendbarer Schaltflächengruppen.Wenn Sie der IDE neue Befehle hinzufügen, fügen Sie dem
Commands
Element einButtons
Element hinzu. Fügen Sie dann für jeden Befehl demButtons
Element ein Button-Element hinzu.Legen Sie die
guid
Attribute der einzelnenButton
Elemente fest, und legen Sie dann dastype
Attribut auf die gewünschte Schaltflächenartid
fest. Sie können auch daspriority
Attribut festlegen, um die relative Position des Befehls in der übergeordneten Gruppe festzulegen.Hinweis
Wird für Standardmenübefehle und -schaltflächen auf Symbolleisten verwendet
type="button"
.Fügen Sie im
Button
Element ein Strings-Element hinzu, das ein ButtonText-Element und ein CommandName-Element enthält. DasButtonText
Element stellt die Textbezeichnung für ein Menüelement oder die QuickInfo für eine Symbolleistenschaltfläche bereit. DasCommandName
Element stellt den Namen des Befehls bereit, der in der Befehlsquelle verwendet werden soll.Wenn Der Befehl ein Symbol enthält, erstellen Sie ein Symbolelement im
Button
Element, und legen Sie dessenguid
Attributeid
auf das Element für dasBitmap
Symbol fest.Hinweis
Symbolleistenschaltflächen müssen Symbole enthalten.
Weitere Informationen finden Sie unter MenuCommands vs. OleMenuCommands.
Wenn für einen ihrer Befehle Symbole erforderlich sind, fügen Sie dem
Commands
Element ein Bitmaps-Element hinzu. Fügen Sie dann für jedes Symbol demBitmaps
Element ein Bitmap-Element hinzu. Hier geben Sie den Speicherort der Bitmapressource an. Weitere Informationen finden Sie unter Hinzufügen von Symbolen zu Menübefehlen.Sie können sich auf die übergeordnete Struktur verlassen, um die meisten Menüs, Gruppen und Befehle korrekt zu platzieren. Für sehr große Befehlssätze oder wenn ein Menü, eine Gruppe oder ein Befehl an mehreren Stellen angezeigt werden muss, wird empfohlen, die Befehlsplatzierung anzugeben.
So verlassen Sie sich auf das Übergeordnete, um UI-Elemente in der IDE zu platzieren
Erstellen Sie für typische übergeordnete Elemente ein
Parent
Element in jedemMenu
,Group
undCommand
element, das in Ihrem Paket definiert ist.Das Ziel des
Parent
Elements ist das Menü oder die Gruppe, das das Menü, die Gruppe oder den Befehl enthält.Legen Sie das
guid
Attribut auf den Namen desGuidSymbol
Elements fest, das den Befehlssatz definiert. Wenn das Zielelement nicht Teil des Pakets ist, verwenden Sie die GUID für diesen Befehlssatz, wie in der entsprechenden VSCT-Datei definiert.Legen Sie das
id
Attribut so fest, dass es demid
Attribut des Zielmenüs oder der Gruppe entspricht. Eine Auflistung der Menüs und Gruppen, die von Visual Studio verfügbar gemacht werden, finden Sie unter GUIDs und IDs von Visual Studio-Menüs oder GUIDs und IDs von Visual Studio-Symbolleisten.
Wenn Sie über eine große Anzahl von UI-Elementen verfügen, die in der IDE platziert werden sollen, oder wenn Elemente vorhanden sind, die an mehreren Stellen angezeigt werden sollen, definieren Sie ihre Platzierungen im CommandPlacements-Element , wie in den folgenden Schritten gezeigt.
So platzieren Sie UI-Elemente mithilfe der Befehlsplatzierung in der IDE
Fügen Sie nach dem
Commands
-Element einCommandPlacements
-Element hinzu.Fügen Sie im
CommandPlacements
Element einCommandPlacement
Element für jedes Menü, jede Gruppe oder jeden Befehl hinzu, um es zu platzieren.Jedes Element oder
Parent
ElementCommandPlacement
platziert ein Menü, eine Gruppe oder einen Befehl an einem IDE-Speicherort. Ein UI-Element kann nur über ein übergeordnetes Element verfügen, aber es können mehrere Befehlsplatzierungen vorhanden sein. Um ein UI-Element an mehreren Speicherorten zu platzieren, fügen Sie einCommandPlacement
Element für jeden Speicherort hinzu.Legen Sie die
guid
Attributeid
und Attribute jedesCommandPlacement
Elements auf das Hostingmenü oder die Gruppe fest, genau wie für einParent
Element. Sie können daspriority
Attribut auch so festlegen, dass die relative Position des UI-Elements festgelegt wird.Sie können die Platzierung kombinieren, indem Sie die Übergeordneten und die Befehlsplatzierung verwenden. Bei sehr großen Befehlssätzen wird jedoch empfohlen, nur die Befehlsplatzierung zu verwenden.
Hinzufügen spezieller Verhaltensweisen
Sie können das CommandFlag-Element verwenden, um das Verhalten von Menüs und Befehlen zu ändern, z. B. um deren Darstellung und Sichtbarkeit zu ändern. Sie können auch beeinflussen, wann ein Befehl mithilfe des VisibilityConstraints-Elements sichtbar ist, oder Tastenkombinationen mithilfe des KeyBindings-Elements hinzufügen. Bestimmte Arten von Menüs und Befehlen verfügen bereits über spezielle Verhaltensweisen.
So fügen Sie spezielle Verhaltensweisen hinzu
Um ein UI-Element nur in bestimmten UI-Kontexten sichtbar zu machen, z. B. wenn eine Lösung geladen wird, verwenden Sie Sichtbarkeitseinschränkungen.
Fügen Sie nach dem
Commands
-Element einVisibilityConstraints
-Element hinzu.Fügen Sie für jedes UI-Element, das eingeschränkt werden soll, ein VisibilityItem-Element hinzu.
Legen Sie für jedes
VisibilityItem
Element dieguid
Attribute undid
Attribute auf das Menü, die Gruppe oder den Befehl fest, und legen Sie dann dascontext
Attribut auf den gewünschten Ui-Kontext fest, wie in der UIContextGuids80 Klasse definiert.
Verwenden Sie eine oder mehrere der folgenden Befehlskennzeichnungen, um die Sichtbarkeit oder Verfügbarkeit eines UI-Elements im Code festzulegen:
DefaultDisabled
DefaultInvisible
DynamicItemStart
DynamicVisibility
NoShowOnMenuController
NotInTBList
Weitere Informationen finden Sie im CommandFlag-Element .
Um die Darstellung eines Elements zu ändern oder seine Darstellung dynamisch zu ändern, verwenden Sie ein oder mehrere der folgenden Befehlskennzeichnungen:
AlwaysCreate
CommandWellOnly
DefaultDocked
DontCache
DynamicItemStart
FixMenuController
IconAndText
Pict
StretchHorizontally
TextMenuUseButton
TextChanges
TextOnly
Weitere Informationen finden Sie im CommandFlag-Element .
Um zu ändern, wie ein Element reagiert, wenn es Befehle empfängt, verwenden Sie ein oder mehrere der folgenden Befehlskennzeichnungen:
AllowParams
CaseSensitive
CommandWellOnly
FilterKeys
NoAutoComplete
NoButtonCustomize
NoKeyCustomize
NoToolbarClose
PostExec
RouteToDocs
TextIsAnchorCommand
Weitere Informationen finden Sie im CommandFlag-Element .
Wenn Sie eine menüabhängige Tastenkombination an ein Menü oder ein Element in einem Menü anfügen möchten, fügen Sie dem Element für das
ButtonText
Menü oder Menüelement ein kaufmännisches Und-Zeichen (&) hinzu. Das Zeichen, das dem kaufmännischen Und-Zeichen folgt, ist die aktive Tastenkombination, wenn das übergeordnete Menü geöffnet ist.Verwenden Sie das KeyBindings-Element , um eine menüunabhängige Tastenkombination an einen Befehl anzufügen. Weitere Informationen finden Sie im KeyBinding-Element .
Verwenden Sie das
LocCanonicalName
Element, um Menütext zu lokalisieren. Weitere Informationen finden Sie im Strings-Element .Einige Menü- und Schaltflächentypen umfassen spezielle Verhaltensweisen. In der folgenden Liste werden einige spezielle Menü- und Schaltflächentypen beschrieben. Weitere Typen finden Sie in den
types
Attributbeschreibungen im Menü-, Schaltflächen- und Kombinationselement .Kombinationsfeld: Ein Kombinationsfeld ist eine Dropdownliste, die auf einer Symbolleiste verwendet werden kann. Wenn Sie der Benutzeroberfläche Kombinationsfelder hinzufügen möchten, erstellen Sie ein Combos-Element im
Commands
Element. Fügen Sie dann demCombos
Element einCombo
Element für jedes hinzuzufügende Kombinationsfeld hinzu.Combo
Elemente weisen die gleichen Attribute und untergeordneten Elemente wieButton
Elemente auf und weisenDefaultWidth
diese ebenfalls aufidCommandList
. DasDefaultWidth
Attribut legt die Breite in Pixel fest, und dasidCommandList
Attribut verweist auf eine Befehls-ID, die zum Auffüllen des Kombinationsfelds verwendet wird.Menücontroller: Ein Menücontroller ist eine Schaltfläche mit einem Pfeil daneben. Durch Klicken auf den Pfeil wird eine Liste geöffnet. Wenn Sie der Benutzeroberfläche einen Menücontroller hinzufügen möchten, erstellen Sie ein
Menu
Element, und legen Sie dessentype
Attribut je nach gewünschtem Verhalten aufMenuController
oderMenuControllerLatched
fest. Um einen Menücontroller aufzufüllen, legen Sie ihn als übergeordnetes Element einesGroup
Elements fest. Der Menücontroller zeigt alle untergeordneten Elemente dieser Gruppe in der Dropdownliste an.