2014-11-13 3 views
2

Как добавить подменю для пункта меню «Добавить», когда щелкните правой кнопкой мыши на визуализаторе визуальных студийных решений?Добавить элемент для добавления меню узла решения или проекта в обозревателе решений

Я должен добавить один элемент подменю, который будет отображаться n, щелкнув правой кнопкой мыши на визуальном студийном решении и переместив его в пункт «Добавить» в этом меню.

Я пытаюсь использовать .vsct (vs package). Пожалуйста, помогите мне с ценными предложениями

ответ

7

Конечно, есть вопросы похожи, но это, кажется, особый случай ...

В общем, вы должны знать menu's command- и идентификатор пакета, который вы хотите расширить. Обычно я делаю это, включив опцию EnableVSIPLogging в реестр, как описано в этой статье: http://blogs.msdn.com/b/dr._ex/archive/2007/04/17/using-enablevsiplogging-to-identify-menus-and-commands-with-vs-2005-sp1.aspx. Опция EnableVSIPLogging была представлена ​​с Visual Studio 2005, но все еще работает в любой новой версии.

После выбора опции EnableVSIPLogging включена, вы можете отобразить разыскиваемую информацию, нажав на пункт меню (или любой другой элемент пользовательского интерфейса, взаимосвязанный с командой), нажимая Ctrl + Сдвига. Это покажет окно сообщения, содержащее указатель пакета и идентификатор команды/меню; Ctrl + C копирует показанные меню или данные команды в буфер обмена, кстати. Если вас интересуют данные меню (в случае, если это контекстное меню, нажмите Ctrl + Shift перед тем, как навести объект).

Это то, что я получил на моей машине ...

--------------------------- 
VSDebug Message 
--------------------------- 
Menu data: 
Guid = {D309F791-903F-11D0-9EFC-00A0C911004F} 
GuidID = 4 
CmdID = 850 
Type = 0x00000100 
Flags = 0x00000000 
NameLoc = A&dd 
--------------------------- 
OK 
--------------------------- 

Информация меню, чем может быть использована в авторинге файла VSCT; этот вопрос может вас заинтересовать: Using vsx how do you create a sub menu with commands?

При чтении ответа другого вопроса вы можете задаться вопросом, как эти ребята определили имена команд команд ... эти имена определяются заголовком vsshlids.h, который является в комплекте с Visual Studio SDK. Таким образом, для GUID показано выше, мы находим ...

// Guid for Shell's group and menu ids 
DEFINE_GUID (guidSHLMainMenu, 
    0xd309f791, 0x903f, 0x11d0, 0x9e, 0xfc, 0x00, 0xa0, 0xc9, 0x11, 0x00, 0x4f); 

Мы можем использовать guidSHLMainMenu для определения группы ...

<Group guid="your-command-set" id="your-group-id"> 
    <Parent guid="guidSHLMainMenu" id="..." /> 
</Group> 

Я ожидал найти IDM_VS_CTXT_ постоянную (или что-то похож) в vsshlids.h, который соответствует идентификатору команды, но нет ... Вместо этого я нашел cmdidShellWindowNavigate7 и cmdidShellWindowNavigate5 констант в stdidcmd.h; и просто попытался их ...

Сначала я создал новый идентификатор-символы для двух групп команд ...

<IDSymbol name="grpIdProjectContextAdd" value="0x1080" /> 
<IDSymbol name="grpIdSolutionContextAdd" value="0x1081" /> 

И команда ...

<IDSymbol name="cmdIdAddItemHelloWorld" value="0x1082" /> 

чем я определил новый группы; и использовал полученные идентификаторы команд как родительские ...

<Groups> 
    <Group guid="your-command-set" id="grpIdProjectContextAdd"> 
     <Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate7" /> 
    </Group> 
    <Group guid="your-command-set" id="grpIdSolutionContextAdd"> 
     <Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate5" /> 
    </Group> 
</Groups> 

Конечно, мне нужна кнопка (которая помещается в Add меню проекта по умолчанию).

<Commands> 
    <Button guid="your-command-set" 
      id="cmdIdAddItemHelloWorld" priority="0x1100" type="Button"> 
     <Parent guid="your-command-set" id="grpIdProjectContextAdd" /> 
     <Strings> 
      <ButtonText>Hello World</ButtonText> 
     </Strings> 
    </Button> 
</Commands> 

Для того, чтобы кнопка также появится в Add меню узла решения, я использую размещение команду ...

<CommandPlacements> 
    <CommandPlacement guid="your-command-set" 
         id="cmdIdAddItemHelloWorld" priority="0x1100"> 
     <Parent guid="your-command-set" id="grpIdSolutionContextAdd" /> 
    </CommandPlacement> 
</CommandPlacements> 

Для меня, он чувствует себя немного Hacky использовать cmdidShellWindowNavigate7 и cmdidShellWindowNavigate5 константы, но в результате я получил это ...

enter image description here

+0

пожалуйста, вы можете дать ссылку подать файл с примером кода? – Epsil0neR

+1

Спасибо @Matze, это было действительно полезно. Я хотел бы найти документацию о vsct, так как я до сих пор не понимаю, как вы обнаружили, что «cmdidShellWindowNavigate7» на самом деле был меню «Проект» Добавить – Easly