【VS拓展入门】<五> 菜单的复用命令

<Group>(命令组)是始终在菜单或工具栏上一起显示的命令的集合,这个集合通常包含按钮,但也可以包含其他菜单或组合框。 可以通过在 .vsct 文件的 <CommandPlacements >元素中将命令组分配到不同的父菜单来复用该命令组。
在IDE中,通过复用命令按钮可以提高开发效率,很多地方都实现了复用命令按钮的操作,如打开项目属性,可以通过以下两处的复用命令"项目属性"按钮:


一、示例一:通过CommandPlacements 复用命令按钮

1、创建菜单命令

  1. 创建 VSIX 项目模板,并命名为ReusableButtons。
  2. 通过" Visual c # 项> Extensibility(扩展性) > Command(命令)",添加自定义命令 ReusableCommand.cs。

此时解决方案目录如下:



通过创建ReusableCommand.cs,.vsct文件已经自动创建了ReusableCommand的相关按钮信息如下:

运行调试后,只有一个命令按钮效果如下:

2、通过<CommandPlacements>创建"ReusableCommandMenu"菜单>"Invoke ReusableCommand"
找到name属性为"guidReusableButtonsPackageCmdSet"的<GuidSymbol>元素节点,添加<IDSymbol>元素:

			<IDSymbol name="ReusableCommandMenu" value="0x0200" />
			<IDSymbol name="ReusableCommandMenuGroup" value="0x0300" />

在<Commands>节点之内,<Groups>节点之前创建<Menus>节点,并添加<Menu>节点:

		<Menus>
			<Menu guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandMenu" priority="0x700" type="Menu">
				<Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS" />
				<Strings>
					<ButtonText>ReusableCommandMenu</ButtonText>
				</Strings>
			</Menu>
		</Menus>

在<Groups>节点元素内添加<Group>节点:

			<Group guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandMenuGroup" priority="0x0800">
				<Parent guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandMenu"/>
			</Group>

在<Commands>元素节点后面添加<CommandPlacements>元素,并添加一个<CommandPlacement>节点:

	<CommandPlacements>
		<CommandPlacement guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandId" priority="0xE00">
			<Parent guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandMenuGroup"/>
		</CommandPlacement>
	</CommandPlacements>

通过CommandPlacement的id属性与命名按钮的id绑定,并在<Parent>指定父元素id为ReusableCommandMenuGroup的菜单组。实现复用Invoke ReusableCommand命令按钮。
此时运行调试,效果如下:


3、通过<CommandPlacements>创建"解决方案管理器"窗口>工具栏>小图标"Invoke ReusableCommand"
在<Commands>元素节点后面添加<CommandPlacements>元素,并添加一个<CommandPlacement>节点,此时节点<CommandPlacements>应该如下:

	<CommandPlacements>
		<CommandPlacement guid="guidReusableButtonsPackageCmdSet" id="MyMenuGroup" priority="0xF00">
			<Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
		</CommandPlacement>
		<CommandPlacement guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandId" priority="0xE00">
			<Parent guid="guidReusableButtonsPackageCmdSet" id="ReusableCommandMenuGroup"/>
		</CommandPlacement>
	</CommandPlacements>

此时运行调试,效果如下:



Priority 字段的值决定了命令在新命令组中的位置。具有较低优先级值的命令显示在具有较高优先级值的命令之前。CommandPlacement 元素中设置的优先级会覆盖项目定义中设置的优先级。允许重复优先级值,但无法保证具有相同优先级值的命令的相对位置,因为devenv /setup命令从注册表创建最终接口的顺序可能不一致。

博客的示例源码:GitHub - 21thCenturyBoy/VSIX_HelloWorld: 扩展VisualStudio编译器示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值