演练:添加菜单管理员添加到工具栏

将工具栏添加到工具窗口 演练和显示此演练的生成方式添加菜单控制器到工具窗口工具栏。 显示的步骤以便也适用于演练中创建的工具栏中, 将工具栏添加到 IDE

菜单管理员可以拆分控件。 菜单控制器的左侧显示最后使用的命令,因此,它可以通过单击它来运行。 菜单控制器的右侧是,那么,当单击,打开其他命令列表中的箭头。 在列表中单击命令,该命令运行,因此,它在菜单控制器的左侧替换命令。 这样,菜单控制器象始终显示列表中的最后使用的命令的命令按钮。

菜单管理员可以出现在菜单,但它们是最常用的工具栏上。

本演练演示了三个可选的选项,在 .vsct 文件中定义的一个菜单控制器。 有关菜单和 .vsct 文件的更多信息,请参见 命令、菜单和工具栏

系统必备

若要完成本演练,您必须安装 Visual Studio 2010 SDK。

备注

有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。

创建菜单控制器

创建菜单控制器

  1. 按照 演练:将工具栏添加到工具窗口 描述的过程创建一个工具栏的工具窗口 VSPackage。

  2. 解决方案资源管理器,打开该对话框的双击 TWToolbar.vsct 在文本编辑器中。

  3. 符号 部分,在名为 “guidTWToolbarCmdSet” GuidSymbol 元素,则以声明菜单控制器、菜单 administrators 组和三个菜单项。

    <IDSymbol name="TestMenuController" value="0x1300" />
    <IDSymbol name="TestMenuControllerGroup" value="0x1060" />
    <IDSymbol name="cmdidMCItem1" value="0x0130" />
    <IDSymbol name="cmdidMCItem2" value="0x0131" />
    <IDSymbol name="cmdidMCItem3" value="0x0132" />
    
  4. 菜单 部分,在最后一个菜单项之后,请定义菜单控制器菜单。

    <Menu guid="guidTWToolbarCmdSet" id="TestMenuController" priority="0x0100" type="MenuController">
      <Parent guid="guidTWToolbarCmdSet" id="TWToolbarGroup" />
      <CommandFlag>IconAndText</CommandFlag>
      <CommandFlag>TextChanges</CommandFlag>
      <CommandFlag>TextIsAnchorCommand</CommandFlag>
      <Strings>
        <ButtonText>Test Menu Controller</ButtonText>
        <CommandName>Test Menu Controller</CommandName>
      </Strings>
    </Menu>
    

    必须包含 TextChanges 和 TextIsAnchorCommand 标志使菜单控制器反映最后选定的命令。

  5. 部分,在最后一组项之后,添加菜单 administrators 组。

    <Group guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" priority="0x000">
      <Parent guid="guidTWToolbarCmdSet" id="TestMenuController" />
    </Group>
    

    通过设置为父菜单的管理员,该组中放置的所有命令将出现在菜单控制器。 priority 忽略属性,将其设置为 0的默认值,,因为它将是 menu 控制器的唯一组。

  6. 按钮 部分,在最后一个按钮项之后,添加每个 按钮 元素菜单项。

    <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem1" priority="0x0000" type="Button">
      <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" />
      <Icon guid="guidImages" id="bmpPic1" />
      <CommandFlag>IconAndText</CommandFlag>
      <Strings>
        <ButtonText>MC Item 1</ButtonText>
        <CommandName>MC Item 1</CommandName>
      </Strings>
    </Button>
    <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem2" priority="0x0100" type="Button">
      <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" />
      <Icon guid="guidImages" id="bmpPic2" />
      <CommandFlag>IconAndText</CommandFlag>
      <Strings>
        <ButtonText>MC Item 2</ButtonText>
        <CommandName>MC Item 2</CommandName>
      </Strings>
    </Button>
    <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem3" priority="0x0200" type="Button">
      <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" />
      <Icon guid="guidImages" id="bmpPicSearch" />
      <CommandFlag>IconAndText</CommandFlag>
      <Strings>
        <ButtonText>MC Item 3</ButtonText>
        <CommandName>MC Item 3</CommandName>
      </Strings>
    </Button>
    
  7. 此时,您可以查看菜单控制器。

    1. 按 F5打开的实验 Visual Studio的实例。

    2. 视图 菜单上,指向 其他窗口,然后单击 测试工具窗口

    3. 菜单管理员显示在工具窗口的工具栏。

    4. 单击箭头在菜单控制器的右侧以查看三个可能的命令。

    请注意,当单击菜单命令,控制器的左侧更改显示该命令。 在下一节中,我们将添加代码来激活这些命令。

  8. 关闭实验 Visual Studio。

实现菜单命令控制器

实现托管代码的菜单命令控制器

  1. 解决方案资源管理器,打开该对话框的双击 PkgCmdID.cs 在文本编辑器中。

  2. 在 PkgCmdIDList 类的现有命令 ID 之后,添加三菜单项的命令 ID。

    public const int cmdidMCItem1 = 0x130;
    public const int cmdidMCItem2 = 0x131;
    public const int cmdidMCItem3 = 0x132;
    
  3. 解决方案资源管理器,打开 TWToolbarPackage.cs。

  4. 在 TWToolbarPackage 类的顶部,添加以下内容:

    private int currentMCCommand; // The currently selected menu controller command
    
  5. 找到标记为 “包成员的” the 隐藏的区域并单击左边距中的加号展开它。

  6. 在 Initialize 方法,在后期最后一次调用 AddCommand 方法,添加代码通过同一处理程序以将每个命令的事件。

    for (int i = PkgCmdIDList.cmdidMCItem1; i <=
        PkgCmdIDList.cmdidMCItem3; i++)
    {
        CommandID cmdID = new
        CommandID(GuidList.guidTWToolbarCmdSet, i);
        OleMenuCommand mc = new OleMenuCommand(new
          EventHandler(OnMCItemClicked), cmdID);
        mc.BeforeQueryStatus += new EventHandler(OnMCItemQueryStatus);
        mcs.AddCommand(mc);
        // The first item is, by default, checked. 
        if (PkgCmdIDList.cmdidMCItem1 == i)
        {
            mc.Checked = true;
            this.currentMCCommand = i;
        }
    }
    
  7. 在 TWToolbarPackage 类的末尾,在 MenuItemCallback 方法的后面,添加一个方法标记选定的命令为已检查。

    private void OnMCItemQueryStatus(object sender, EventArgs e)
    {
        OleMenuCommand mc = sender as OleMenuCommand;
        if (null != mc)
        {
            mc.Checked = (mc.CommandID.ID == this.currentMCCommand);
        }
    }
    
  8. 在 OnMCItemQueryStatus 方法后,那么,当用户选择菜单控制器时,的命令添加一个事件处理程序中:

    private void OnMCItemClicked(object sender, EventArgs e)
    {
        OleMenuCommand mc = sender as OleMenuCommand;
        if (null != mc)
        {
            string selection;
            switch (mc.CommandID.ID)
            {
                case PkgCmdIDList.cmdidMCItem1:
                    selection = "Menu controller Item 1";
                    break;
    
                case PkgCmdIDList.cmdidMCItem2:
                    selection = "Menu controller Item 2";
                    break;
    
                case PkgCmdIDList.cmdidMCItem3:
                    selection = "Menu controller Item 3";
                    break;
    
                default:
                    selection = "Unknown command";
                    break;
            }
            this.currentMCCommand = mc.CommandID.ID;
    
            IVsUIShell uiShell =
              (IVsUIShell)GetService(typeof(SVsUIShell));
            Guid clsid = Guid.Empty;
            int result;
            uiShell.ShowMessageBox(
                       0,
                       ref clsid,
                       "Test Tool Window Toolbar Package",
                       string.Format(CultureInfo.CurrentCulture,
                                     "You selected {0}", selection),
                       string.Empty,
                       0,
                       OLEMSGBUTTON.OLEMSGBUTTON_OK,
                       OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
                       OLEMSGICON.OLEMSGICON_INFO,
                       0,
                       out result);
        }
    }
    
  9. 生成解决方案,并更正发生的任何错误。

测试菜单控制器

测试菜单控制器

  1. 按 F5 打开的实验 Visual Studio的实例。

  2. 打开 测试工具窗口

    菜单控制器出现在工具窗口工具栏中显示 “MC 项 1 "。

  3. 在箭头左侧单击菜单控制器按钮。

    对话框将出现并显示消息 “选定菜单控制器项 1 "。 通知消息对应于菜单控制器按钮的文本。

  4. 单击箭头在菜单管理员显示三个项目,第一个哪些上选择并具有突出显示框在其图标附近。 单击 MC 项 3

    对话框将出现并显示消息 “选定菜单控制器项 3 "。 菜单控制器按钮现在显示 “MC 项 3 "。

  5. 单击箭头在菜单管理员显示选项。 通知新的默认值, MC 项 3,现在处于选中状态。

请参见

任务

演练:将工具栏添加到工具窗口

演练:将工具栏添加到 IDE

其他资源

命令、菜单和工具栏的演练

命令、菜单和工具栏