VS插件开发(4)-如何添加到指定到指定位置

1.先看结果
2.代码分析
3.GuidSymbol
4.如何获取GUID

1.先看结果

在上一篇里,我们讲解了下,菜单,分组和,按钮三个子目录,现在我们要来实践下,实现效果如下


菜单Test.png

在顶部菜单上添加一个Test,Test下有一级目录Test1,Test1下有二级菜单,包含一个TestButton按钮。
首先想下,这个结构应该是怎样的呢?

VS插件开发(4)-如何添加到指定到指定位置_第1张图片
结构.png

红框则是Group,到这里你其实可以发现,不管是Menu还是Button都要依托Group存在。

2.代码分析




  
  

  

    
      
        
        
          Test
          Test
        
      

      
        
        
          Test1
          Test1
        
      
      
    

    
      
        
      
      
        
      
    

    
      
    

    
      
    
  


  
    

    
      
      
      
      
      
    

    
      
      
      
      
      
      
    
  



上面的结构已经指出,要想实现这个效果,要有2个Group,两个Menu(一个是在顶部的Test,一个是Test1),以及一个Button。
但是他们之间谁包含谁又该如何确认?谁是谁又该如何区分?

  • 唯一标识GUID和ID
    • GUID
      标示一个窗口,或者一个菜单,比如之前的Test菜单,它就有一个唯一的GUID来标示它,它是唯一的,会根据硬件以及IP等等软硬件生成一个全球独一无二的标志,可以在在线生成网站来生成。除了系统已经定义的菜单,我们自己写的时候,这个GUID是没有固定的,只要按规则生成即可
    • ID
      GUID之内的逻辑标志,什么意思?嗯,我们知道在Test下有一个Test1菜单,这个Test1是属于Test的,它的GUid也是Test的Guid,但如果有个Test2,如何区分呢,这就用到了ID了,它是在Guid下的一个唯一标示,用来区分某个Guid下的控件,举个例子,Guid是国名(中国),ID是中国的一个人的人名(张小凡)

有了这两个标志,每个控件都有了自己的唯一标识,这解决了如何区分的问题。

这是依托在vs原有的逻辑分组中,IDG_VS_MM_BUILDDEBUGRUN是包含“生成”和“调试”菜单的逻辑组。
如何知道谁包含谁?这便要用到parent这个字段。

其中又包含两个字段,正是GUID和ID,如此便知道了自己是属于谁的。
至于其他的字段,都是很字面的意思,一看便知。

3.GuidSymbol

GuidSymbol 包含了很多条IDSymbol,GuidSymbol 用来定义一个GUID的,这其实相当于一个常量定义,不然你在用GUID的时候都要复制一长串的字符串。
IDSymbol自然是在GUID下的一些控件了,value就是ID了。

4.如何获取GUID

上面的代码是依附在主菜单上的,如果想在文件菜单下,或者编辑菜单下应该如何获取对应的GUID和ID呢。
https://msdn.microsoft.com/en-us/library/cc826118.aspx
或者
打开注册表
编辑器(打开运行窗口,输入regedit),在[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\General]找到该路径,右击-新建-DWORD(32-位)值(D),建立一个注册文件,将其命名为EnableVSIPLogging,并将其值改为1。按下Ctrl+Shift,用鼠标点击VS里的菜单,就会弹出一个VSDebug Message窗口,如图-6所示:

VS插件开发(4)-如何添加到指定到指定位置_第2张图片

其中Guid和CmdID值就是我们需要的,NameLoc表示我们点击的菜单名称。

你可能感兴趣的:(VS插件开发(4)-如何添加到指定到指定位置)