Поделиться через


Проектирование XML-файлов командной таблицы (VSCT)

Xml-файл таблицы команд (VSCT) описывает макет и внешний вид элементов команд для VSPackage. Элементы команд включают кнопки, поля со списком, меню, панели инструментов и группы элементов команд. В этой статье описывается XML-файлы таблиц команд, как они влияют на элементы и меню команд и как их создавать.

Команды, меню, группы и VSCT-файл

VSCT-файлы организованы вокруг команд, меню и групп команд. XML-теги в VSCT-файле представляют каждый из этих элементов, а также другие связанные элементы, такие как кнопки команд, размещение команд и растровые изображения.

При создании пакета VSPackage с помощью шаблона пакета Visual Studio шаблон создает VSCT-файл с необходимыми элементами для команды меню, окна инструментов или пользовательского редактора в зависимости от выбранных вариантов. Затем этот VSCT-файл можно изменить в соответствии с требованиями конкретного VSPackage. Примеры изменения VSCT-файла см. в разделе "Расширение меню и команды".

Чтобы создать пустой VSCT-файл, см. статью "Практическое руководство. Создание VSCT-файла". После создания вы добавите XML-элементы, атрибуты и значения в файл, чтобы описать макет элемента команды. Подробные xml-схемы см. в справочнике по схеме XML VSCT.

Различия между CTC и VSCT-файлами

Хотя значение xml-тегов в VSCT-файле совпадает с тем, что эти теги в формате CTC теперь устарели, их реализация немного отличается:

  • Новый <тег extern> — это место, в котором вы ссылаетесь на другие H-файлы , которые необходимо скомпилировать, например эти файлы для панели инструментов Visual Studio.

  • Хотя VSCT-файлы поддерживают инструкцию /include , так как файлы CTC делают, он также включает новый <элемент импорта> . Разница заключается в том, что /include приносит всю информацию, а <импорт> приводит только к именам.

  • Хотя для CTC-файлов требуется файл заголовка, в котором определяются директивы препроцессора, для VSCT-файлов не требуется. Вместо этого поместите директивы в таблицу символов, расположенную в элементах символов>, расположенных в нижней части VSCT-файла.<

  • VSCT-файлы содержат <тег заметки> , который позволяет внедрять любую информацию, которую вы хотите, например заметки или даже рисунки.

  • Значения хранятся в виде атрибутов элемента.

  • Флаги команд можно хранить по отдельности или стекать. Однако IntelliSense не работает над флагами команд с накоплением. Дополнительные сведения о флагах команд см. в элементе CommandFlag.

  • Можно указать несколько типов, например раскрывающихся списков, со списком и т. д.

  • Идентификаторы GUID не проверяются.

  • Каждый элемент пользовательского интерфейса имеет строку, представляющую текст, отображаемый вместе с ним.

  • Родительский элемент является необязательным. Если опущено, используется группа значений Unknown .

  • Аргумент icon является необязательным.

  • Раздел растрового рисунка: этот раздел совпадает с файлом CTC , за исключением того, что теперь можно указать имя файла с помощью Href, который будет извлечен компилятором vsct.exe во время компиляции.

  • ResID: старый идентификатор ресурса растрового изображения можно использовать и по-прежнему работает так же, как и в CTC-файлах .

  • HRef: новый метод, позволяющий указать имя файла для ресурса растрового изображения. Предполагается, что все используются, поэтому можно опустить раздел "Использовано". Компилятор сначала будет искать локальные ресурсы для файла, а затем на всех сетевых ресурсах и любых ресурсах, определенных параметром /I .

  • Привязка ключей: вам больше не нужно указывать эмулятор. Если указать его, компилятор предполагает, что редактор и эмулятор одинаковы.

  • Keychord: Keychord был удален. Новый формат — Key1,Mod1,Key2,Mod2. Можно указать символ, шестнадцатеричную или константу VK.

Новый компилятор vsct.exe компилирует файлы CTC и VSCT . Однако старый компилятор ctc.exe не распознает и не компилирует vsct-файлы .

Компилятор vsct.exe можно использовать для преобразования существующего CTO-файла в VSCT-файл. Дополнительные сведения см. в статье "Практическое руководство. Создание VSCT-файла из существующего CTO-файла".

Элементы VSCT-файла

В таблице команд есть следующая иерархия и элементы:

  • Элемент CommandTable: представляет все команды, группы меню и меню, связанные с VSPackage.

  • Элемент Extern: ссылается на все внешние H-файлы, которые требуется объединить с VSCT-файлом.

  • Включить элемент: ссылается на все дополнительные файлы заголовка (H), которые нужно скомпилировать вместе с VSCT-файлом . VSCT-файл может содержать H-файлы, содержащие константы, определяющие команды, группы меню и меню, которые предоставляет интегрированная среда разработки или другой VSPackage.

  • Элемент Commands: представляет все отдельные команды, которые можно выполнить. Каждая команда имеет следующие четыре дочерних элемента:

  • Элемент меню: представляет все меню и панели инструментов в VSPackage. Меню — это контейнеры для групп команд.

  • Элемент Groups: представляет все группы в VSPackage. Группы — это коллекции отдельных команд.

  • Элемент Button: представляет все кнопки команд и элементы меню в VSPackage. Кнопки — это визуальные элементы управления, которые могут быть связаны с командами.

  • Элемент Bitmaps: представляет все растровые изображения для всех кнопок в VSPackage. Растровые изображения — это изображения, которые отображаются рядом с кнопками команд или на них в зависимости от контекста.

  • Элемент CommandPlacements. Указывает дополнительные расположения, в которых отдельные команды должны находиться в меню VSPackage.

  • Элемент VisibilityConstraints: указывает, отображается ли команда в любое время или только в определенных контекстах, например при отображении определенного диалогового окна или окна. Меню и команды, имеющие значение для этого элемента, будут отображаться только в том случае, если указанный контекст активен. Поведение по умолчанию — отображать команду в любое время.

  • Элемент KeyBindings: указывает все ключевые привязки для команд. То есть одно или несколько сочетаний клавиш, которые необходимо нажать для выполнения команды, например CTRL+S.

  • Элемент UsedCommands: сообщает среде Visual Studio, что, хотя указанная команда реализуется другим кодом, когда текущий VSPackage активен, он предоставляет реализацию команды.

  • Элемент Symbols: содержит имена символов и идентификаторы GUID для всех команд в пакете.

Рекомендации по проектированию файлов VSCT

Чтобы успешно разработать VSCT-файл, следуйте этим рекомендациям.

  • Команды могут размещаться только в группах, группы можно размещать только в меню, а меню можно размещать только в группах. В интегрированной среде разработки отображаются только меню, группы и команды не отображаются.

  • Подменю не может быть непосредственно назначено меню, но должно быть назначено группе, которая, в свою очередь, назначена меню.

  • Команды, подменю и группы могут быть назначены одной родительской группе или меню с помощью родительского поля их определяющей директивы.

  • Упорядочение таблицы команд исключительно с помощью родительских полей в директивах имеет значительное ограничение. Директивы, определяющие объекты, могут принимать только один родительский аргумент.

  • Для повторного использования команд, групп или подменю требуется использование новой директивы для создания нового экземпляра объекта с собственной GUID:ID парой.

  • Каждая GUID:ID пара должна быть уникальной. Повторное использование команды, которая, например, была помещена в меню, панель инструментов или контекстное меню, обрабатывается интерфейсом IOleCommandTarget .

  • Команды и подменю также можно назначать нескольким группам, а группы можно назначать нескольким меню с помощью элемента Commands.

Заметки к vsct-файлу

Если вы вносите изменения в VSCT-файл после компиляции и размещения его в собственной вспомогательной библиотеке DLL, следует запустить devenv.exe /setup /nosetupvstemplates. Это позволяет перечитать ресурсы VSPackage, указанные в экспериментальном реестре, и внутреннюю базу данных, описывающую перестроение Visual Studio.

Во время разработки можно создать и зарегистрировать несколько проектов VSPackage в экспериментальном кусте реестра, что может привести к путанице в интегрированной среде разработки. Чтобы устранить эту проблему, можно сбросить экспериментальный куст в параметры по умолчанию, чтобы удалить все зарегистрированные VSPackage и любые изменения, внесенные в интегрированную среду разработки. Чтобы сбросить экспериментальный куст, используйте средство CreateExpInstance.exe, которое поставляется с пакетом SDK Для Visual Studio. Его можно найти по адресу:

%PROGRAMFILES(x86)%\Visual Studio\<version> SDK\VisualStudioIntegration\Tools\Bin\CreateExpInstance.exe

Запустите средство с помощью команды CreateExpInstance /Reset. Помните, что это средство удаляется из экспериментального куста всех зарегистрированных VSPackages, которые обычно не установлены в Visual Studio.