【问题标题】:Create a new top-level menu in Visual Studio在 Visual Studio 中创建新的顶级菜单
【发布时间】:2010-11-22 06:16:06
【问题描述】:

我们有一个当前从工具菜单启动的 VS 插件,该插件由一个 UI 组成,为用户提供一些选项按钮,我现在想将其转换为提供的顶级菜单相同的功能。

我已阅读 this 教程,该教程帮助我添加了新的顶级菜单,但无法真正理解所有步骤背后的逻辑。该指南并未真正明确每个步骤创建的内容或如何更改输出。
这些步骤创建的是一个新的顶级菜单,其下方有一个项目。我正在尝试在我的菜单中创建一些层次结构(即顶级 -> 子类别 -> 命令),但对所有组/菜单/ID 结构有点迷失。 这些文件的结构有什么明确的解释吗?文档还是教程?如果有人有这方面的经验并且可以帮助解决问题,我将不胜感激......

【问题讨论】:

    标签: visual-studio add-in visual-studio-addins


    【解决方案1】:

    我没有尝试过执行分层菜单项,但我在使用 Visual SDK .vcst 文件时遇到了类似的问题。这是一种痛苦。你可以做几件事。

    1. 为它安装 VS 包编辑器到 Visual Studio 博客条目:http://blogs.msdn.com/b/visualstudio/archive/2010/09/08/introducing-the-vspackage-builder.aspx
    2. 下载执行类似操作的加载项的源代码(开放源代码,以便您了解他们是如何做到的)。示例是 AnkhSVN,它是 Visual Studio 的 Subversion 存储库插件。这里是源代码:http://ankhsvn.open.collab.net/source/browse/ankhsvn/

    【讨论】:

      【解决方案2】:

      我认为现在“插件”是指作为 VS 包的扩展(使用 VS SDK),因为“插件”是 VS 2013 及更低版本的旧形式的扩展。 (如果您真的是指“加载项”,请查看我的示例 HOWTO: Adding buttons, commandbars and toolbars to Visual Studio .NET from an add-in

      包使用 .vsct 文件。要回答您的问题,请参阅我的示例 here 的 .vsct 文件:

      • CommandTopMenu
      • CommandSubMenu

      (要了解上下文菜单、工具栏等,另请参阅其他内容)。在 .vcst 文件中,他们使用“CommandPlacements”将项目的定义与其“放置”分开,并使用 cmets 来解释这 3 种项目之间的关系:

      1. 菜单(主菜单/顶部菜单/子菜单/上下文菜单)和工具栏。
      2. 组:组是其他组以及命令和子菜单的容器。
      3. 命令

      记住规则:

      • 顶级菜单的父级始终是 VS 的主菜单,而不是组
      • 子菜单的父级始终是一个组,而不是直接的工具栏或任何类型的菜单。
      • 命令的父级始终是一个组,而不是直接的工具栏或任何类型的菜单(与子菜单的规则相同)
      • 组的父级可以是菜单、工具栏、上下文菜单等,也可以是另一个组。
      • 菜单(任何种类)或工具栏可以由您的扩展(VS 的主菜单除外)或现有的 VS 创建,由前缀“IDM_”标识。请参阅 GUIDs and IDs of Visual Studio menusGUIDs and IDs of Visual Studio toolbars
      • 组可以是新的(由您的扩展创建)或现有的 Visual Studio 组,由前缀“IDG_”标识。您在上面的链接中有一些内置的 Visual Studio 组,但要获得更详尽的列表,请安装在 .vsct 文件中提供智能感知的 ExtensionTools 扩展 (Mads Kristensen) 或查看其 VsctBuiltInCache.cs file 的源代码。

      【讨论】:

        【解决方案3】:

        代码示例

        <?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>
        

        这为您提供了以下顶级菜单:

        这是有关该主题的完整章节。这几乎解释了(分层)菜单上需要了解的所有内容。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-14
          • 1970-01-01
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多