visual studio插件开发-Menu( 三 )


visual studio插件开发-Menu

文章插图
image
改成这样就会显示在代码窗口的右键菜单中
<Groups>  <Group guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup" priority="0x0600">    <!-- 代码窗口的右键菜单操作 -->    <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>  </Group></Groups>
visual studio插件开发-Menu

文章插图
image
所以一级菜单只需要添加一个Group 并且设置该Group的Parent为已知的定义ID即可
二级菜单这里需要添加Menu了 且 一级菜单项要定义为Menu而不是Button!!
先新建一个group1以**右键菜单为parent(已知定义ID)**,以group1为parent,再定义一个group2以一级菜单Menu为parent,再将二级菜单项定义为Button并以group2为parent
有点绕吧,比如我要在工程文件的右键菜单 添加一个二级菜单,像下面这样子

visual studio插件开发-Menu

文章插图
image
  1. 在Groups节点下新建一个group:MyMenuGroup1 以工程右键菜单为parent
<Group guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0600">    <!--定义在头文件的已知定义ID -->    <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/></Group>
  1. 在Menus节点下新建一个menu:MyMenu,以上面的MyMenuGroup1位parent
<Menus>  <Menu guid ="guidMenuDemoVSIXPackageCmdSet" id="MyMenu" priority="0x3110" type="Menu">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1"/>    <Strings>      <ButtonText>New</ButtonText>      <CommandName>New</CommandName>    </Strings>  </Menu></Menus>
  1. 再创建一个group:MyMenuGroup2 以上面的MyMenu为parent
<Group guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup2" priority="0x0600">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenu"/></Group>
  1. 创建Button以MyMenuGroup2为parent
<Buttons>  <Button guid="guidMenuDemoVSIXPackageCmdSet" id="TestCommandId" priority="0x0100" type="Button">    <Parent guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup2" />    <Icon guid="guidImages" id="bmpPic1" />    <Strings>      <ButtonText>Invoke TestCommand</ButtonText>    </Strings>  </Button></Buttons>完整定义:
visual studio插件开发-Menu

文章插图
如果想要同时显示在多个地方咋整比如 我既要显示在工程右键菜单里面,又要显示在普通文件的右键菜单,又要显示在代码右键菜单
这里就用到上面提到的 CommandPlacements
还是以上面的例子,这时候第一步的group1:MyMenuGroup2的parent就不能填了
而是要添加CommandPlacements,id要填 MyMenuGroup2,Parent填具体ID
<CommandPlacements>    <CommandPlacement guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0000">      <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/>    </CommandPlacement>    <CommandPlacement guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0000">      <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />    </CommandPlacement>    <CommandPlacement guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup1" priority="0x0000">      <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN" />    </CommandPlacement></CommandPlacements>

经验总结扩展阅读