关于VSPackage中的VSCT,算是VSX开发中比较重要的一个成员。 我这里给出LearnVSXNow!系列文章关于VSCT的链接,除了#14有译文

看完上面几篇文章,也就对VSCT有一些基本的认识了,能做什么,不能做什么应该了解。

在我项目中,一个功能,可能会出现在很多不同的地方,诸如新建项(New Item)的功能,可以在项目文件中点击右键,在添加(Add)菜单中找到,也可以在菜单中的项目(Project)中找到添加新项(Add New Item)。 如何把想要的功能添加到指定位置? 这里有一篇文章:

作者介绍了一种快速找到某个菜单的Guid:Id的方法,大家可以参考参考。

起初也没有使用这种方法,而是不停的翻看MSDN相关文档,诸如这篇。 但是所罗列的根本满足不了我的需求,且不可能一个一个去尝试。 最后发现其实在sdk中是有默认的vsct文件的,参考msdn

也就是上面所说的四个文件:

  • SharedCmdDef.vsct
  • SharedCmdPlace.vsct
  • ShellCmdDef.vsct
  • ShellCmdPlace.vsct

在其中不仅能查到所需要的GUID和ID,且能参考一些想要的东西,诸如助记符,图标,关系使用CommandPlacement,快捷键实现等等问题。 但在使用中发现,几个vsct文件,并没有完全概括vs2010所有的命令和菜单和组,有些是找不到的。

助记符


助记符意思是说点Alt键后,菜单出现下划线的键位。 例如说在vs2010中打开一个文件,使用助记符的话,点下Alt键,依次点击f-o-f,即可弹出打开文件的对话框。

在项目中,我需要在菜单栏中增加一个菜单,别的菜单都有相应的助记符,当我在VSCT中如此定义一个Button的文本时:

  1. 交易开发(&R)

告诉我没有该实体,随后我才想到了xml的实体&应该表示为&,而期间我居然还试过使用WPF的方式去定义:交易开发(_R),自然都是徒劳无功的。 但是如果你查看SharedCmdDef.vsctShellCmdDef.vsct,你会发现满篇的&

CommandPlacement


起初是不知道CommandPlacement的存在的。 当时写一个新建交易的功能,要出现在很多个地方,所以定义了多个新建交易的Button,然后依次给其Parent赋值。 当然一直认为,绝对有解决方案,只是暂时不知道怎么做。 还没有看后续的关于VSCT的文章时,已经从上面的两个文件SharedCmdPlace.vsctShellCmdPlace.vsct中找到了答案。

快捷键


快捷键也能从上面的两个文件中找到,诸如:

  1. <KeyBindingguid="guidVSStd97"id="cmdidPaste"editor="guidVSStd97"key1="V"mod1="Control"/>

综合VS2010,可以得到一些全面的认识,比如说guidVSStd97表示的可能是全局的意思,而如果对于使用两个快捷键:

  1. <KeyBindingguid="guidVSStd2K"id="cmdidOBGoToSearchCmd"editor="guidVSStd97"key1="K"mod1="Control"key2="R"mod2="Control"/>

你也能找到相应的原型,还有诸如如何定义功能键:

  1. <KeyBindingguid="guidVSStd97"id="cmdidGotoDefn"editor="guidVSStd97"key1="VK_F12"/>

如果有要同时按Control和Shift怎么办:

  1. <KeyBindingguid="guidVSStd97"id="cmdidPasteNextTBXCBItem"editor="guidVSStd97"key1="V"mod1="Control Shift"/>

如何查找


说了很多找到这几个文件的好处,那如何把自己想要的功能放入指定的菜单内仍然是一个问题。 其实我上面已经提到,这四个文件几乎包括了所有VS2010的命令、菜单和组,这样我们完全可以使用最笨的办法,找到现有的Button,看它的Parent。

比如说我需要在新建项目这里增加一个Button:新建交易工程

那么我就可以用New Project的关键字搜索这四个文件,最后能定位到这个Button:

  1. <Buttonguid="guidVSStd97"id="cmdidNewProject"priority="0x0000"type="Button">
  2. <Iconguid="guidSHLMainMenu"id="2"/>
  3. <CommandFlag>DynamicVisibility</CommandFlag>
  4. <CommandFlag>TextMenuUseButton</CommandFlag>
  5. <Strings>
  6. <ButtonText>New &amp;Project...</ButtonText>
  7. <MenuText>&amp;Project...</MenuText>
  8. <ToolTipText>New Project</ToolTipText>
  9. </Strings>
  10. </Button>

然后我在查找这个ID:cmdidNewProject,这里能找到它的一些关系,属于那个Group,这时候根据情况不一样,可能还要找这个Group的Parent,当然,最终能确定所需要的Group的Guid和Id。

如果你装的是中文也没有关系,可以学我当初使用&amp;P的关键字去查找,或者使用key1="A",一样能轻松定位。 当然,总有些东西是无法满足的,比如说我需要把Button添加在一个项目的文件夹上的右键菜单中,这时候就有点难为我的样子,因为我没法在这里面找到相应的(或许我还没有找到),这时候就可以使用上面所说的修改注册表的办法去做。而且据我所看,这个办法估计也是vs开发人员留的调试办法。

最新文章

  1. 转:OSGi 入门篇:生命周期层
  2. 2016弱校联盟十一专场10.3---We don&#39;t wanna work!(STL--set的使用)
  3. hdu 4666:Hyperspace(最远曼哈顿距离 + STL使用)
  4. Topcoder SRM 597
  5. 从一个前端项目实践 Git flow 的流程与参考
  6. Yarn中的几种状态机
  7. C primer plus 读书笔记第十章
  8. git分享:Git_DataPro
  9. nvm进行node多版本管理
  10. 和菜鸟一起学linux之upnp协议的学习记录
  11. 微软推出了Cloud Native Application Bundles和开源ONNX Runtime
  12. JAVA学习笔记(1)—— eclipse自动补全和主题及字体配置
  13. 解决nohup中不写入日志的问题
  14. 线程同步Volatile与Synchronized(一)
  15. 『cs231n』绪论
  16. hdu 2048 神上帝以及老天爷
  17. 前端知识概述----公司内部的一次分享 分类: JavaScript HTML+CSS 2015-04-16 21:24 2593人阅读 评论(2) 收藏
  18. HDU1698:Just a Hook(线段树区间更新)
  19. Android开发之Button事件实现方法的总结
  20. HBase查询优化——持续更新

热门文章

  1. 计算后缀表达式的过程(C#)
  2. 同步软件UltraCompare 64位 软件及注册机
  3. 谨慎使用#pragma pack
  4. leetcode:回溯——permutation-sequence,
  5. java常用输出技巧,debug
  6. 【转】批处理命令 For循环命令详解!
  7. MapReduce执行jar练习
  8. 关于package.json学习
  9. ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一!
  10. BZOJ1008: [HNOI2008]越狱(组合数)