zoukankan      html  css  js  c++  java
  • Visual Studio 扩展入门(五)菜单篇 中

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

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

    1、创建菜单命令

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

    此时解决方案目录如下:
    image.png

    通过创建ReusableCommand.cs,.vsct文件已经自动创建了ReusableCommand的相关按钮信息如下:
    image.png
    运行调试后,只有一个命令按钮效果如下:
    image.png
    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命令按钮。
    此时运行调试,效果如下:
    image.png
    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>
    

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

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

    博客的示例源码:https://github.com/21thCenturyBoy/VSIX_HelloWorld

  • 相关阅读:
    [BZOJ2555]SubString
    [十二省联考2019]字符串问题
    CF149E Martian String
    挣钱攻略——浅谈移动开发者如何盈利
    教你如何在iPhone AppStore赚钱
    java8IO工具类(java疯狂讲义3复习笔记)
    asp.net数据库连接,三层架构方法调用 (转)
    prototype.js 源码解读
    使用ASP.NET AJAX让GridView的数据行显示提示框(ToolTip)(转)
    Ajax加载信息提示实例(转)
  • 原文地址:https://www.cnblogs.com/craft0625/p/15014455.html
Copyright © 2011-2022 走看看