Создать новое меню верхнего уровня в Visual Studio - PullRequest
4 голосов
/ 22 ноября 2010

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

Я прочитал это руководство , которое помогло мне добавить новое меню верхнего уровня, но не смогло понять логику всех шагов. Руководство не совсем ясно, что создает каждый из шагов или как вы можете изменить вывод.
Создание шагов - это новое меню верхнего уровня с одним элементом под ним. Я пытаюсь создать некоторую иерархию в моем меню (т.е. Верхний уровень -> Подкатегория -> Команды), но потерял abit со всей структурой групп / меню / идентификаторов. Есть ли четкое объяснение структуры этих файлов? Документация или учебник? Если бы кто-то имел опыт в этой области и мог бы помочь разобраться, я был бы очень признателен ...

Ответы [ 3 ]

1 голос
/ 22 декабря 2010

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

  1. Установите редактор пакетов VS в блоге Visual Studio. Запись для него: http://blogs.msdn.com/b/visualstudio/archive/2010/09/08/introducing-the-vspackage-builder.aspx
  2. Загрузите исходный код (с открытым исходным кодом, чтобы вы могли видеть, как они это делают) для добавленияв том, что делает подобные вещи.Примером является AnkhSVN, который является надстройкой хранилища Subversion для Visual Studio.Вот исходный код: http://ankhsvn.open.collab.net/source/browse/ankhsvn/
0 голосов
/ 27 декабря 2018

Я предполагаю, что в настоящее время под «надстройкой» вы подразумеваете расширение, являющееся пакетом VS (использующим VS SDK), поскольку «надстройка» была более старой формой расширения для VS 2013 и ниже.(Если вы действительно имеете в виду «надстройку», посмотрите мой пример HOWTO: Добавление кнопок, панелей команд и панелей инструментов в Visual Studio .NET из надстройки )

Пакеты используют .vsctфайлы.Чтобы ответить на ваш вопрос, см. Vsct файлы моих образцов здесь :

  • CommandTopMenu
  • CommandSubMenu

(и дляузнать также см. другие для контекстных меню, панелей инструментов и т. д.).В файле .vcst они используют «CommandPlacements», чтобы отделить определение элемента от его «размещения», и комментарии, чтобы объяснить взаимосвязь между 3 видами элементов:

  1. Меню (Главное меню/ Верхние меню / Подменю / Контекстные меню) и Панели инструментов.
  2. Группы: группа - это контейнер для других групп, а также для команд и подменю.
  3. Команды

Запомните правила:

  • Родителем верхнего меню всегда является Главное меню VS, а не группа
  • Родителем подменювсегда является группой, никогда напрямую не панелью инструментов или каким-либо видом меню.
  • Родителем команды всегда является группа, а не непосредственно панель инструментов или какое-либо меню (то же правило, что и для подменю)
  • Родителем группы может быть меню, панель инструментов, контекстное меню и т. Д., А также может быть другая группа.
  • Можно создать меню (любой вид) или панель инструментов.вашим расширением (кроме основного меню VS) или существующим из VS, идентифицируйтеПрефикс "IDM_".См. GUID и идентификаторы меню Visual Studio и GUID и идентификаторы панелей инструментов Visual Studio .
  • Группа может быть новой (созданной вашим расширением) или существующей группой Visual Studio, идентифицируемой префиксом «IDG_».У вас есть несколько встроенных групп Visual Studio по ссылкам выше, но для более полного списка установите расширение ExtensionTools (Mads Kristensen), которое предоставляет intellisense в файле .vsct, или проверьте исходный код его VsctBuiltInCache.cs file .
0 голосов
/ 19 августа 2016

Пример кода

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="...">
  <!-- Extern section unchanged -->
  <Commands package="guidHowToPackagePkg">
    <Menus>
      <!-- New menu added -->
      <Menu guid="guidBasicVSCTSampleCmdSet" id="SubMenu" priority="0x200"
        type="Menu">
        <Parent guid="guidBasicVSCTSampleCmdSet" id="TopLevelMenuGroup" />
        <Strings>
          <ButtonText>Other Commands</ButtonText>
          <CommandName>Other Commands</CommandName>
        </Strings>
      </Menu>
    </Menus>
    <Groups>
      <!-- Group changed to SubMenuGroup and attached to SubMenu -->
      <Group guid="guidBasicVSCTSampleCmdSet" id="SubMenuGroup"
        priority="0x0600">
        <Parent guid="guidBasicVSCTSampleCmdSet" id="SubMenu"/>
      </Group>
    </Groups>

    <Buttons>
      <!-- We attached these two buttons to SubMenuGroup -->
      <Button guid="guidBasicVSCTSampleCmdSet" id="ThirdCommand" priority="0x0100"
        type="Button">
        <Parent guid="guidBasicVSCTSampleCmdSet" id="SubMenuGroup" />
        <Icon guid="guidImages" id="bmpPicX" />
        <Strings>
          <CommandName>ThirdCommand</CommandName>
          <ButtonText>Third Command</ButtonText>
        </Strings>
      </Button>
      <Button guid="guidBasicVSCTSampleCmdSet" id="FourthCommand"
        priority="0x0101" type="Button">
        <Parent guid="guidBasicVSCTSampleCmdSet" id="SubMenuGroup" />
        <Icon guid="guidImages" id="bmpPicArrows" />
        <Strings>
          <CommandName>FourthCommand</CommandName>
          <ButtonText>Fourth Command</ButtonText>
        </Strings>
      </Button>
    </Buttons>

  </Commands>

  <Symbols>
    <!-- We add a SubMenu and changed SubMenuGroup -->
    <GuidSymbol name="guidBasicVSCTSampleCmdSet" value="...">
      <IDSymbol name="SubMenu" value="0x0101" />
      <IDSymbol name="SubMenuGroup" value="0x0201" />
    </GuidSymbol>
  </Symbols>
</CommandTable>

Предоставляется следующее меню верхнего уровня:

enter image description here

Вот полная глава по теме.Это в значительной степени объясняет все, что нужно знать в (иерархическом) меню.

http://dotneteers.net/blogs/divedeeper/archive/2010/05/23/vs-2010-package-development-chapter-2-commands-menus-and-toolbars.aspx

...