Создание VSCT-файлов
В этом документе показано, как создать VSCT-файл для добавления элементов меню, панелей инструментов и других элементов пользовательского интерфейса в интегрированную среду разработки Visual Studio .IDE. Используйте эти действия при добавлении элементов пользовательского интерфейса в пакет Visual Studio (VSPackage), который еще не имеет VSCT-файла .
Для новых проектов рекомендуется использовать шаблон пакета Visual Studio, так как он создает VSCT-файл , который уже содержит необходимые элементы для команды меню, окна инструментов или пользовательского редактора. Этот VSCT-файл можно изменить в соответствии с требованиями VSPackage. Дополнительные сведения об изменении VSCT-файла см. в примерах в меню расширения и командах.
Создание файла
Создайте VSCT-файл на этих этапах: создайте структуру для файлов и ресурсов, объявите элементы пользовательского интерфейса, поместите элементы пользовательского интерфейса в интегрированную среду разработки и добавьте любое специализированное поведение.
Структура файла
Базовая структура VSCT-файла — это корневой элемент CommandTable, содержащий элемент Commands и элемент Symbols.
Создание структуры файлов
Добавьте VSCT-файл в проект, выполнив действия, описанные в разделе "Практическое руководство. Создание VSCT-файла".
Добавьте необходимые пространства имен в
CommandTable
элемент, как показано в следующем примере:<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
В элементе
CommandTable
добавьтеCommands
элемент для размещения всех пользовательских меню, панелей инструментов, групп команд и команд. Чтобы пользовательские элементы пользовательского интерфейса могли загружаться,Commands
элемент должен иметь егоPackage
атрибут, заданный для имени пакета.Commands
После этого добавьтеSymbols
элемент, чтобы определить идентификаторы GUID для пакета, а также имена и идентификаторы команд для элементов пользовательского интерфейса.
Включение ресурсов Visual Studio
Используйте элемент Extern для доступа к файлам, определяющим команды Visual Studio и меню, необходимые для вставки элементов пользовательского интерфейса в интегрированную среду разработки. Если вы будете использовать команды, определенные за пределами пакета, используйте элемент UseCommands для информирования Visual Studio.
Включение ресурсов Visual Studio
В верхней части
CommandTable
элемента добавьте одинExtern
элемент для ссылки на каждый внешний файл и задайтеhref
атрибут имени файла. Вы можете ссылаться на следующие файлы заголовков, чтобы получить доступ к ресурсам Visual Studio:Stdidcmd.h: определяет идентификаторы для всех команд, предоставляемых Visual Studio.
Vsshlids.h: содержит идентификаторы команд для меню Visual Studio.
Если пакет вызывает все команды, определенные Visual Studio или другими пакетами, добавьте
UsedCommands
элемент послеCommands
элемента. Заполните этот элемент элемент элементом UsedCommand для каждой вызываемой команды, которая не является частью пакета.guid
id
UsedCommand
Задайте для элементов значения GUID и идентификатора вызываемых команд.Дополнительные сведения о том, как найти идентификаторы и идентификаторы идентификаторов команд Visual Studio, см. в разделе ИДЕНТИФИКАТОРы и идентификаторы команд Visual Studio. Чтобы вызвать команды из других пакетов, используйте GUID и идентификатор команды, как определено в VSCT-файле для этих пакетов.
Объявление элементов пользовательского интерфейса
Объявите все новые элементы пользовательского интерфейса в Symbols
разделе VSCT-файла.
Объявление элементов пользовательского интерфейса
В элементе
Symbols
добавьте три элемента GuidSymbol . КаждыйGuidSymbol
элемент имеетname
атрибут иvalue
атрибут.name
Задайте атрибут таким образом, чтобы он отражал назначение элемента. Атрибутvalue
принимает GUID. (Чтобы создать GUID, на сайте Меню "Сервис" , выберите "Создать GUID" и выберите "Формат реестра".)Первый
GuidSymbol
элемент представляет пакет и обычно не имеет дочерних элементов. ВторойGuidSymbol
элемент представляет набор команд и будет содержать все символы, определяющие меню, группы и команды. ТретийGuidSymbol
элемент представляет хранилище изображений и содержит символы для всех значков для команд. Если у вас нет команд, использующих значки, можно опустить третийGuidSymbol
элемент.В элементе
GuidSymbol
, представляющего набор команд, добавьте один или несколько элементов IDSymbol . Каждая из них представляет меню, панель инструментов, группу или команду, добавляемую в пользовательский интерфейс.Для каждого
IDSymbol
элемента задайтеname
для атрибута имя, которое будет использоваться для ссылки на соответствующее меню, группу или команду, а затем задайтеvalue
для элемента шестнадцатеричное число, которое будет представлять его идентификатор команды.IDSymbol
Два элемента с одинаковым родительским значением не могут иметь одно и то же значение.Если для любого из элементов пользовательского интерфейса требуются значки, добавьте
IDSymbol
элемент для каждого значка вGuidSymbol
элемент, представляющий хранилище образов.
Размещение элементов пользовательского интерфейса в интегрированной среде разработки
Элементы меню, групп и кнопок содержат определения для всех меню, групп и команд, определенных в пакете. Поместите эти меню, группы и команды в интегрированную среду разработки с помощью родительского элемента, который является частью определения элемента пользовательского интерфейса или с помощью элемента CommandPlacement , определенного в другом месте.
Каждый элемент и Group
Button
элемент Menu
имеют guid
атрибут и id
атрибут. Всегда задайте guid
атрибут для сопоставления имени GuidSymbol
элемента, представляющего набор команд, и задайте id
для атрибута имя IDSymbol
элемента, представляющего меню, группу или команду в Symbols
разделе.
Определение элементов пользовательского интерфейса
Если вы определяете новые меню, подменю, контекстные меню или панели инструментов, добавьте
Menus
элемент вCommands
элемент. Затем, чтобы создать каждое меню, добавьте элемент Menu вMenus
элемент.guid
Задайте иid
атрибутыMenu
элемента, а затем задайтеtype
для атрибута нужный вид меню. Можно также задатьpriority
атрибут, чтобы установить относительную позицию меню в родительской группе.Примечание.
Атрибут
priority
не применяется к панелям инструментов и контекстным меню.Все команды в интегрированной среде разработки Visual Studio должны размещаться группами команд, которые являются прямыми дочерними элементами меню и панелей инструментов. Если вы добавляете новые меню или панели инструментов в интегрированную среду разработки, они должны содержать новые группы команд. Вы также можете добавить группы команд в существующие меню и панели инструментов, чтобы можно было визуально сгруппировать команды.
При добавлении новых групп команд необходимо сначала создать
Groups
элемент, а затем добавить в него элемент Group для каждой группы команд.guid
Задайте иid
атрибуты каждогоGroup
элемента, а затем задайтеpriority
атрибут, чтобы установить относительную позицию группы в родительском меню. Дополнительные сведения см. в разделе "Создание повторно используемых групп кнопок".При добавлении новых команд в интегрированную
Buttons
среду разработки добавьте элемент вCommands
элемент. Затем для каждой команды добавьте элемент Button вButtons
элемент.guid
Задайте иid
атрибуты каждогоButton
элемента, а затем задайтеtype
для атрибута тип нужной кнопки. Вы также можете задатьpriority
атрибут, чтобы установить относительную позицию команды в родительской группе.Примечание.
Используется
type="button"
для стандартных команд меню и кнопок на панелях инструментов.В элементе
Button
добавьте элемент Strings , содержащий элемент ButtonText и элемент CommandName . ЭлементButtonText
предоставляет текстовую метку для элемента меню или подсказку для кнопки панели инструментов. ЭлементCommandName
предоставляет имя команды, используемой в команде.Если команда будет иметь значок, создайте элемент Icon в элементе
Button
и задайте егоguid
иid
атрибутыBitmap
элементу для значка.Примечание.
Кнопки панели инструментов должны иметь значки.
Дополнительные сведения см. в разделе MenuCommands и OleMenuCommands.
Если для любой из команд требуются значки, добавьте элемент Bitmaps в
Commands
элемент. Затем для каждого значка добавьте элемент Bitmap вBitmaps
элемент. Здесь указывается расположение ресурса растрового изображения. Дополнительные сведения см. в разделе "Добавление значков в команды меню".Для правильного размещения большинства меню, групп и команд можно полагаться на родительскую структуру. Для очень больших наборов команд или при отображении меню, группы или команды в нескольких местах рекомендуется указать размещение команд.
Использование родительского элемента для размещения элементов пользовательского интерфейса в интегрированной среде разработки
Для типичного
Parent
родительских элементов создайте элемент в каждомGroup
Menu
элементе, аCommand
также элемент, определенный в пакете.Цель
Parent
элемента — это меню или группа, которая будет содержать меню, группу или команду.Присвойте атрибуту
guid
имя элемента, определяющегоGuidSymbol
набор команд. Если целевой элемент не является частью пакета, используйте guid для этого набора команд, как определено в соответствующем VSCT-файле .Задайте атрибут для
id
сопоставленияid
атрибута целевого меню или группы. Список меню и групп, предоставляемых Visual Studio, см. в разделе GUID и идентификаторы меню Visual Studio или идентификаторы идентификаторов и идентификаторов панелей инструментов Visual Studio.
Если в интегрированной среде разработки имеется большое количество элементов пользовательского интерфейса или есть элементы, которые должны отображаться в нескольких местах, определите их размещение в элементе CommandPlacements , как показано на следующих шагах.
Использование размещения команд для размещения элементов пользовательского интерфейса в интегрированной среде разработки
После элемента
Commands
добавьте элементCommandPlacements
.В элементе
CommandPlacements
добавьтеCommandPlacement
элемент для каждого меню, группы или команды для размещения.Каждый
CommandPlacement
элемент илиParent
элемент помещает одно меню, группу или команду в одном расположении интегрированной среды разработки. Элемент пользовательского интерфейса может иметь только один родительский элемент, но может иметь несколько размещения команд. Чтобы разместить элемент пользовательского интерфейса в нескольких расположениях, добавьтеCommandPlacement
элемент для каждого расположения.guid
Задайте иid
атрибуты каждогоCommandPlacement
элемента в меню размещения или группе так же, как и дляParent
элемента. Можно также задатьpriority
атрибут, чтобы установить относительную позицию элемента пользовательского интерфейса.Вы можете смешивать размещение путем родительского и командного размещения. Однако для очень больших наборов команд рекомендуется использовать только размещение команд.
Добавление специализированных поведений
Элемент CommandFlag можно использовать для изменения поведения меню и команд, например для изменения внешнего вида и видимости. Вы также можете повлиять на то, когда команда отображается с помощью элемента VisibilityConstraints , или добавить сочетания клавиш с помощью элемента KeyBindings . Некоторые виды меню и команд уже имеют специализированное поведение.
Добавление специализированных поведений
Чтобы сделать элемент пользовательского интерфейса видимым только в определенных контекстах пользовательского интерфейса, например при загрузке решения, используйте ограничения видимости.
После элемента
Commands
добавьте элементVisibilityConstraints
.Чтобы ограничить каждый элемент пользовательского интерфейса, добавьте элемент VisibilityItem .
Для каждого
VisibilityItem
элемента задайтеguid
в меню, группе или команде атрибутыid
, а затем задайтеcontext
нужный контекст пользовательского интерфейса, как определено в UIContextGuids80 классе.
Чтобы задать видимость или доступность элемента пользовательского интерфейса в коде, используйте один или несколько следующих флагов команд:
DefaultDisabled
DefaultInvisible
DynamicItemStart
DynamicVisibility
NoShowOnMenuController
NotInTBList
Дополнительные сведения см. в элементе CommandFlag .
Чтобы изменить способ отображения элемента или динамически изменить его внешний вид, используйте один или несколько следующих флагов команд:
AlwaysCreate
CommandWellOnly
DefaultDocked
DontCache
DynamicItemStart
FixMenuController
IconAndText
Pict
StretchHorizontally
TextMenuUseButton
TextChanges
TextOnly
Дополнительные сведения см. в элементе CommandFlag .
Чтобы изменить способ реагирования элемента при получении команд, используйте один или несколько следующих флагов команд:
AllowParams
CaseSensitive
CommandWellOnly
FilterKeys
NoAutoComplete
NoButtonCustomize
NoKeyCustomize
NoToolbarClose
PostExec
RouteToDocs
TextIsAnchorCommand
Дополнительные сведения см. в элементе CommandFlag .
Чтобы присоединить сочетание клавиш, зависящих от меню, или элемент в меню, добавьте амперсанд (&) в
ButtonText
элемент для меню или элемента меню. Символ, который следует амперсанду, является активным сочетанием клавиш при открытии родительского меню.Чтобы подключить к команде сочетание клавиш независимо от меню, используйте элемент KeyBindings . Дополнительные сведения см. в элементе KeyBinding .
Чтобы локализовать текст меню, используйте
LocCanonicalName
элемент. Дополнительные сведения см. в элементе Strings .Некоторые типы меню и кнопки включают специализированное поведение. В следующем списке описаны некоторые специализированные типы меню и кнопки. Другие типы см
types
. в описаниях атрибутов в элементах Menu, Button и Combo .Поле со списком: поле со списком — это раскрывающийся список, который можно использовать на панели инструментов. Чтобы добавить поля со списком в пользовательский интерфейс, создайте элемент Combos в элементе
Commands
. Затем добавьте к элементуCombos
элемент для каждого поля со спискомCombo
для добавления.Combo
элементы имеют те же атрибуты и дочерние элементы, чтоButton
и элементы,idCommandList
а также атрибутыDefaultWidth
. АтрибутDefaultWidth
задает ширину в пикселях, аidCommandList
атрибут указывает на идентификатор команды, используемый для заполнения поля со списком.Контроллер меню: контроллер меню — это кнопка со стрелкой рядом с ней. Щелкнув стрелку, откроется список. Чтобы добавить контроллер меню в пользовательский интерфейс, создайте
Menu
элемент и задайте егоtype
атрибутMenuController
илиMenuControllerLatched
в зависимости от нужного поведения. Чтобы заполнить контроллер меню, задайте его в качестве родительскогоGroup
элемента. Контроллер меню будет отображать все дочерние элементы этой группы в раскрывающемся списке.