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


Создание VSCT-файлов

В этом документе показано, как создать VSCT-файл для добавления элементов меню, панелей инструментов и других элементов пользовательского интерфейса в интегрированную среду разработки Visual Studio .IDE. Используйте эти действия при добавлении элементов пользовательского интерфейса в пакет Visual Studio (VSPackage), который еще не имеет VSCT-файла .

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

Создание файла

Создайте VSCT-файл на этих этапах: создайте структуру для файлов и ресурсов, объявите элементы пользовательского интерфейса, поместите элементы пользовательского интерфейса в интегрированную среду разработки и добавьте любое специализированное поведение.

Структура файла

Базовая структура VSCT-файла — это корневой элемент CommandTable, содержащий элемент Commands и элемент Symbols.

Создание структуры файлов

  1. Добавьте VSCT-файл в проект, выполнив действия, описанные в разделе "Практическое руководство. Создание VSCT-файла".

  2. Добавьте необходимые пространства имен в CommandTable элемент, как показано в следующем примере:

    <CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
    
  3. В элементе CommandTable добавьте Commands элемент для размещения всех пользовательских меню, панелей инструментов, групп команд и команд. Чтобы пользовательские элементы пользовательского интерфейса могли загружаться, Commands элемент должен иметь его Package атрибут, заданный для имени пакета.

    Commands После этого добавьте Symbols элемент, чтобы определить идентификаторы GUID для пакета, а также имена и идентификаторы команд для элементов пользовательского интерфейса.

Включение ресурсов Visual Studio

Используйте элемент Extern для доступа к файлам, определяющим команды Visual Studio и меню, необходимые для вставки элементов пользовательского интерфейса в интегрированную среду разработки. Если вы будете использовать команды, определенные за пределами пакета, используйте элемент UseCommands для информирования Visual Studio.

Включение ресурсов Visual Studio

  1. В верхней части CommandTable элемента добавьте один Extern элемент для ссылки на каждый внешний файл и задайте href атрибут имени файла. Вы можете ссылаться на следующие файлы заголовков, чтобы получить доступ к ресурсам Visual Studio:

    • Stdidcmd.h: определяет идентификаторы для всех команд, предоставляемых Visual Studio.

    • Vsshlids.h: содержит идентификаторы команд для меню Visual Studio.

  2. Если пакет вызывает все команды, определенные Visual Studio или другими пакетами, добавьте UsedCommands элемент после Commands элемента. Заполните этот элемент элемент элементом UsedCommand для каждой вызываемой команды, которая не является частью пакета. guid id UsedCommand Задайте для элементов значения GUID и идентификатора вызываемых команд.

    Дополнительные сведения о том, как найти идентификаторы и идентификаторы идентификаторов команд Visual Studio, см. в разделе ИДЕНТИФИКАТОРы и идентификаторы команд Visual Studio. Чтобы вызвать команды из других пакетов, используйте GUID и идентификатор команды, как определено в VSCT-файле для этих пакетов.

Объявление элементов пользовательского интерфейса

Объявите все новые элементы пользовательского интерфейса в Symbols разделе VSCT-файла.

Объявление элементов пользовательского интерфейса

  1. В элементе Symbols добавьте три элемента GuidSymbol . Каждый GuidSymbol элемент имеет name атрибут и value атрибут. name Задайте атрибут таким образом, чтобы он отражал назначение элемента. Атрибут value принимает GUID. (Чтобы создать GUID, на сайте Меню "Сервис" , выберите "Создать GUID" и выберите "Формат реестра".)

    Первый GuidSymbol элемент представляет пакет и обычно не имеет дочерних элементов. Второй GuidSymbol элемент представляет набор команд и будет содержать все символы, определяющие меню, группы и команды. Третий GuidSymbol элемент представляет хранилище изображений и содержит символы для всех значков для команд. Если у вас нет команд, использующих значки, можно опустить третий GuidSymbol элемент.

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

    Для каждого IDSymbol элемента задайте name для атрибута имя, которое будет использоваться для ссылки на соответствующее меню, группу или команду, а затем задайте value для элемента шестнадцатеричное число, которое будет представлять его идентификатор команды. IDSymbol Два элемента с одинаковым родительским значением не могут иметь одно и то же значение.

  3. Если для любого из элементов пользовательского интерфейса требуются значки, добавьте IDSymbol элемент для каждого значка в GuidSymbol элемент, представляющий хранилище образов.

Размещение элементов пользовательского интерфейса в интегрированной среде разработки

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

Каждый элемент и GroupButton элемент Menuимеют guid атрибут и id атрибут. Всегда задайте guid атрибут для сопоставления имени GuidSymbol элемента, представляющего набор команд, и задайте id для атрибута имя IDSymbol элемента, представляющего меню, группу или команду в Symbols разделе.

Определение элементов пользовательского интерфейса

  1. Если вы определяете новые меню, подменю, контекстные меню или панели инструментов, добавьте Menus элемент в Commands элемент. Затем, чтобы создать каждое меню, добавьте элемент Menu в Menus элемент.

    guid Задайте и id атрибуты Menu элемента, а затем задайте type для атрибута нужный вид меню. Можно также задать priority атрибут, чтобы установить относительную позицию меню в родительской группе.

    Примечание.

    Атрибут priority не применяется к панелям инструментов и контекстным меню.

  2. Все команды в интегрированной среде разработки Visual Studio должны размещаться группами команд, которые являются прямыми дочерними элементами меню и панелей инструментов. Если вы добавляете новые меню или панели инструментов в интегрированную среду разработки, они должны содержать новые группы команд. Вы также можете добавить группы команд в существующие меню и панели инструментов, чтобы можно было визуально сгруппировать команды.

    При добавлении новых групп команд необходимо сначала создать Groups элемент, а затем добавить в него элемент Group для каждой группы команд.

    guid Задайте и id атрибуты каждого Group элемента, а затем задайте priority атрибут, чтобы установить относительную позицию группы в родительском меню. Дополнительные сведения см. в разделе "Создание повторно используемых групп кнопок".

  3. При добавлении новых команд в интегрированную Buttons среду разработки добавьте элемент в Commands элемент. Затем для каждой команды добавьте элемент Button в Buttons элемент.

    1. guid Задайте и id атрибуты каждого Button элемента, а затем задайте type для атрибута тип нужной кнопки. Вы также можете задать priority атрибут, чтобы установить относительную позицию команды в родительской группе.

      Примечание.

      Используется type="button" для стандартных команд меню и кнопок на панелях инструментов.

    2. В элементе Button добавьте элемент Strings , содержащий элемент ButtonText и элемент CommandName . Элемент ButtonText предоставляет текстовую метку для элемента меню или подсказку для кнопки панели инструментов. Элемент CommandName предоставляет имя команды, используемой в команде.

    3. Если команда будет иметь значок, создайте элемент Icon в элементе Button и задайте его guid и id атрибуты Bitmap элементу для значка.

      Примечание.

      Кнопки панели инструментов должны иметь значки.

    Дополнительные сведения см. в разделе MenuCommands и OleMenuCommands.

  4. Если для любой из команд требуются значки, добавьте элемент Bitmaps в Commands элемент. Затем для каждого значка добавьте элемент Bitmap в Bitmaps элемент. Здесь указывается расположение ресурса растрового изображения. Дополнительные сведения см. в разделе "Добавление значков в команды меню".

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

Использование родительского элемента для размещения элементов пользовательского интерфейса в интегрированной среде разработки

  1. Для типичного Parent родительских элементов создайте элемент в каждом GroupMenuэлементе, а Command также элемент, определенный в пакете.

    Цель Parent элемента — это меню или группа, которая будет содержать меню, группу или команду.

    1. Присвойте атрибуту guid имя элемента, определяющего GuidSymbol набор команд. Если целевой элемент не является частью пакета, используйте guid для этого набора команд, как определено в соответствующем VSCT-файле .

    2. Задайте атрибут для id сопоставления id атрибута целевого меню или группы. Список меню и групп, предоставляемых Visual Studio, см. в разделе GUID и идентификаторы меню Visual Studio или идентификаторы идентификаторов и идентификаторов панелей инструментов Visual Studio.

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

Использование размещения команд для размещения элементов пользовательского интерфейса в интегрированной среде разработки

  1. После элемента Commands добавьте элемент CommandPlacements.

  2. В элементе CommandPlacements добавьте CommandPlacement элемент для каждого меню, группы или команды для размещения.

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

  3. guid Задайте и id атрибуты каждого CommandPlacement элемента в меню размещения или группе так же, как и для Parent элемента. Можно также задать priority атрибут, чтобы установить относительную позицию элемента пользовательского интерфейса.

    Вы можете смешивать размещение путем родительского и командного размещения. Однако для очень больших наборов команд рекомендуется использовать только размещение команд.

Добавление специализированных поведений

Элемент CommandFlag можно использовать для изменения поведения меню и команд, например для изменения внешнего вида и видимости. Вы также можете повлиять на то, когда команда отображается с помощью элемента VisibilityConstraints , или добавить сочетания клавиш с помощью элемента KeyBindings . Некоторые виды меню и команд уже имеют специализированное поведение.

Добавление специализированных поведений

  1. Чтобы сделать элемент пользовательского интерфейса видимым только в определенных контекстах пользовательского интерфейса, например при загрузке решения, используйте ограничения видимости.

    1. После элемента Commands добавьте элемент VisibilityConstraints.

    2. Чтобы ограничить каждый элемент пользовательского интерфейса, добавьте элемент VisibilityItem .

    3. Для каждого VisibilityItem элемента задайте guid в меню, группе или команде атрибуты id , а затем задайте context нужный контекст пользовательского интерфейса, как определено в UIContextGuids80 классе.

  2. Чтобы задать видимость или доступность элемента пользовательского интерфейса в коде, используйте один или несколько следующих флагов команд:

    • DefaultDisabled

    • DefaultInvisible

    • DynamicItemStart

    • DynamicVisibility

    • NoShowOnMenuController

    • NotInTBList

    Дополнительные сведения см. в элементе CommandFlag .

  3. Чтобы изменить способ отображения элемента или динамически изменить его внешний вид, используйте один или несколько следующих флагов команд:

    • AlwaysCreate

    • CommandWellOnly

    • DefaultDocked

    • DontCache

    • DynamicItemStart

    • FixMenuController

    • IconAndText

    • Pict

    • StretchHorizontally

    • TextMenuUseButton

    • TextChanges

    • TextOnly

    Дополнительные сведения см. в элементе CommandFlag .

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

    • AllowParams

    • CaseSensitive

    • CommandWellOnly

    • FilterKeys

    • NoAutoComplete

    • NoButtonCustomize

    • NoKeyCustomize

    • NoToolbarClose

    • PostExec

    • RouteToDocs

    • TextIsAnchorCommand

    Дополнительные сведения см. в элементе CommandFlag .

  5. Чтобы присоединить сочетание клавиш, зависящих от меню, или элемент в меню, добавьте амперсанд (&) в ButtonText элемент для меню или элемента меню. Символ, который следует амперсанду, является активным сочетанием клавиш при открытии родительского меню.

  6. Чтобы подключить к команде сочетание клавиш независимо от меню, используйте элемент KeyBindings . Дополнительные сведения см. в элементе KeyBinding .

  7. Чтобы локализовать текст меню, используйте LocCanonicalName элемент. Дополнительные сведения см. в элементе Strings .

    Некоторые типы меню и кнопки включают специализированное поведение. В следующем списке описаны некоторые специализированные типы меню и кнопки. Другие типы см types . в описаниях атрибутов в элементах Menu, Button и Combo .

    • Поле со списком: поле со списком — это раскрывающийся список, который можно использовать на панели инструментов. Чтобы добавить поля со списком в пользовательский интерфейс, создайте элемент Combos в элементе Commands . Затем добавьте к элементу Combos элемент для каждого поля со списком Combo для добавления. Comboэлементы имеют те же атрибуты и дочерние элементы, что Button и элементы, idCommandList а также атрибутыDefaultWidth. Атрибут DefaultWidth задает ширину в пикселях, а idCommandList атрибут указывает на идентификатор команды, используемый для заполнения поля со списком.

    • Контроллер меню: контроллер меню — это кнопка со стрелкой рядом с ней. Щелкнув стрелку, откроется список. Чтобы добавить контроллер меню в пользовательский интерфейс, создайте Menu элемент и задайте его type атрибут MenuController или MenuControllerLatchedв зависимости от нужного поведения. Чтобы заполнить контроллер меню, задайте его в качестве родительского Group элемента. Контроллер меню будет отображать все дочерние элементы этой группы в раскрывающемся списке.