2014-01-14 55 views
1

我研究了這個link,以便在Visual Studio 2012中使用VSPackage添加自定義菜單命令。如何使用VSPackage在Visual Studio 2012中添加多個菜單項?

一切都很好,直到我想添加更多的菜單項。

在提供的文檔中,他們沒有解釋如何添加一個菜單項。

舉例來說,我在TfsUtility.vsct文件作了如下設置:

<Menus> 
    <Menu guid="guidTfsUtilityCmdSet" id="TfsUtility" priority="0x700" type="Menu"> 
     <Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS" /> 
     <Strings> 
      <ButtonText>Tfs Utility</ButtonText> 
      <CommandName>Tfs Utility</CommandName> 
     </Strings> 
    </Menu> 
</Menus> 

...

<Group guid="guidTfsUtilityCmdSet" id="MyMenuGroup" priority="0x0600"> 
    <Parent guid="guidTfsUtilityCmdSet" id="TfsUtility"/> 
</Group> 

...

<Button guid="guidTfsUtilityCmdSet" id="cmdidMyCommand" priority="0x0100" type="Button"> 
    <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" /> 
    <Strings> 
     <ButtonText>Branch</ButtonText> 
    </Strings> 
</Button> 

...

<GuidSymbol name="guidTfsUtilityCmdSet" value="{d5549d5d-47af-40e0-a7e5-e9ed7f64d577}"> 

    <IDSymbol name="MyMenuGroup" value="0x1020" /> 
    <IDSymbol name="cmdidMyCommand" value="0x0100" /> 

    <IDSymbol name="TfsUtility" value="0x1021"/> 
</GuidSymbol> 

問題:

  1. 如何添加菜單選項的詳細選項(分公司例如後)? enter image description here

  2. 如何爲每個菜單項關聯命令?我想爲每個菜單項顯示不同的消息。

非常感謝您

回答

1

我找到了解決辦法:

  1. PkgCmdIDList頁,添加一些常量,如:

    public const uint cmdiChangesets = 0x101; // or cmdiYourMenu instead of cmdiChangesets 
    public const uint cmdidCheckin = 0x102; 
    public const uint cmdidGet = 0x103; 
    
  2. 創建回調(在YourProjectNamePackage,對我來說是TfsUtilityPackage)click事件像

    private void TfsMenuItemBranchCallback(object sender, EventArgs e) 
    { 
        // do something 
    } 
    
    private void TfsMenuItemPendingCallback(object sender, EventArgs e) 
    { 
        // do something 
    } 
    
    ... 
    
  3. 在XXUtility.vsct(fo我TfsUtility。vsct),在<Buttons>節點創建按鈕

     <Button guid="guidTfsUtilityCmdSet" id="cmdidChangesets" priority="0x0101" type="Button"> 
          <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" /> 
          <Strings> 
           <ButtonText>Changesets</ButtonText> 
          </Strings> 
         </Button> 
    
         <Button guid="guidTfsUtilityCmdSet" id="cmdidCheckin" priority="0x0102" type="Button"> 
          <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" /> 
          <Strings> 
           <ButtonText>Pending changes</ButtonText> 
          </Strings> 
         </Button> 
    
  4. 添加IDSymbol在<GuidSymbol>節點

    <IDSymbol name="cmdidChangesets" value="0x0101" /> <IDSymbol name="cmdidCheckin" value="0x0102" />

0x0101必須從PkgCmdIDList類,這是0x101和常量的值相匹配值必須不同才能顯示所有菜單項

3
  1. 要增加一個菜單項,再添加一個按鈕部分用不同的ID。

  2. 要實現你需要提供你的MenuItemCallback與OleMenuCommandService註冊它的命令:

OleMenuCommandService MCS = GetService的(typeof運算(IMenuCommandService))作爲OleMenuCommandService;

if (null != mcs) 
{ 
    // Create the command for the menu item. 
    CommandID menuCommandID = new CommandID(guidCommandGroup, myCommandID); 
    MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID); 
    mcs.AddCommand(menuItem); 
} 

更多信息請參見Command Implementation

相關問題