Anj*_*nju 2 .net vsx vspackage visual-studio-extensions vsct
右键单击visual studio解决方案资源管理器时,如何为"添加"菜单项添加子菜单?
我必须添加一个子菜单项,右键单击visual studio解决方案并移动到该菜单中的Add选项.
我正在尝试使用.vsct(vs package).请帮我提出宝贵的建议
Mat*_*tze 12
当然,有类似的问题,但这似乎是一个特例...
通常,您需要知道要扩展的菜单命令和包ID.我通常通过启用本文所述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启用该选项后,您可以通过单击菜单项(或与命令互连的任何其他UI元素)同时按Ctrl+ 来显示所需信息Shift.这将显示一个包含包guid和命令/菜单ID的消息框; 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
---------------------------
Run Code Online (Sandbox Code Playgroud)
菜单信息可用于创作VSCT文件; 这个问题可能是您感兴趣的:使用vsx如何使用命令创建子菜单?
在阅读其他问题的答案时,您可能想知道这些人是如何计算命令guids的名称的......这些名称是由头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);
Run Code Online (Sandbox Code Playgroud)
我们可以guidSHLMainMenu用于组定义......
<Group guid="your-command-set" id="your-group-id">
<Parent guid="guidSHLMainMenu" id="..." />
</Group>
Run Code Online (Sandbox Code Playgroud)
我期望找到一个与命令id匹配的IDM_VS_CTXT_常量(或类似的东西)vsshlids.h,但是nope ...相反,我找到cmdidShellWindowNavigate7并且cmdidShellWindowNavigate5常量stdidcmd.h; 然后试了一下......
首先,我为两个命令组创建了新的id符号......
<IDSymbol name="grpIdProjectContextAdd" value="0x1080" />
<IDSymbol name="grpIdSolutionContextAdd" value="0x1081" />
Run Code Online (Sandbox Code Playgroud)
还有一个命令......
<IDSymbol name="cmdIdAddItemHelloWorld" value="0x1082" />
Run Code Online (Sandbox Code Playgroud)
比我定义新的组; 并使用获得的命令标识符作为父...
<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>
Run Code Online (Sandbox Code Playgroud)
当然,我需要一个按钮(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>
Run Code Online (Sandbox Code Playgroud)
要使按钮也出现在Add解决方案节点的菜单中,我使用命令放置...
<CommandPlacements>
<CommandPlacement guid="your-command-set"
id="cmdIdAddItemHelloWorld" priority="0x1100">
<Parent guid="your-command-set" id="grpIdSolutionContextAdd" />
</CommandPlacement>
</CommandPlacements>
Run Code Online (Sandbox Code Playgroud)
对我来说,使用cmdidShellWindowNavigate7和cmdidShellWindowNavigate5
常量感觉有点笨拙,但结果我得到了这个......

| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |