Добавить пункт в меню "Добавить" узла решения или проекта в обозревателе решений
Как добавить подменю для пункта "Добавить", если щелкнуть правой кнопкой мыши на обозревателе решений Visual Studio?
Мне нужно добавить один элемент подменю, который будет отображаться при щелчке правой кнопкой мыши по решению Visual Studio, и перейти в пункт "Добавить" в этом меню.
Я пытаюсь использовать.vsct (против пакета). Пожалуйста, помогите мне с ценными предложениями
1 ответ
Конечно, есть похожие вопросы, но это, кажется, особый случай...
В общем, вам нужно знать идентификатор команды и пакета, который вы хотите расширить. Я обычно делаю это, включив 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+Shift. Это покажет окно сообщения, содержащее guid пакета и идентификатор команды / меню; 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
файл; этот вопрос может вас заинтересовать: используя vsx, как создать подменю с командами?
Читая ответ на другой вопрос, вы можете задаться вопросом, как эти парни вычислили имена для командных руководств... эти имена определяются vsshlids.h
заголовочный файл, который входит в состав Visual Studio SDK. Итак, для приведенного выше руководства мы находим...
// 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
; и просто попробовал их...
Сначала я создал новые id-символы для двух командных групп...
<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>
Для меня это немного странно использовать cmdidShellWindowNavigate7
а также cmdidShellWindowNavigate5
константы, но в результате я получил это...