Конечно, есть вопросы похожи, но это, кажется, особый случай ...
В общем, вы должны знать 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](https://i.stack.imgur.com/eq1t4.png)
пожалуйста, вы можете дать ссылку подать файл с примером кода? – Epsil0neR
Спасибо @Matze, это было действительно полезно. Я хотел бы найти документацию о vsct, так как я до сих пор не понимаю, как вы обнаружили, что «cmdidShellWindowNavigate7» на самом деле был меню «Проект» Добавить – Easly