VS插件開發(fā)(4)-如何添加到指定到指定位置

1.先看結(jié)果
2.代碼分析
3.GuidSymbol
4.如何獲取GUID

1.先看結(jié)果

在上一篇里誉碴,我們講解了下,菜單舌缤,分組和箕戳,按鈕三個(gè)子目錄,現(xiàn)在我們要來(lái)實(shí)踐下国撵,實(shí)現(xiàn)效果如下


菜單Test.png

在頂部菜單上添加一個(gè)Test陵吸,Test下有一級(jí)目錄Test1,Test1下有二級(jí)菜單介牙,包含一個(gè)TestButton按鈕壮虫。
首先想下,這個(gè)結(jié)構(gòu)應(yīng)該是怎樣的呢环础?

結(jié)構(gòu).png

紅框則是Group囚似,到這里你其實(shí)可以發(fā)現(xiàn),不管是Menu還是Button都要依托Group存在线得。

2.代碼分析

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <Extern href="stdidcmd.h"/>
  <Extern href="vsshlids.h"/>

  <Commands package="guidVSPackage2Pkg">

    <Menus >
      <Menu guid="Test" id="TestMenu" priority="0x1111" type="Menu">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_MM_BUILDDEBUGRUN" />
        <Strings>
          <ButtonText>Test</ButtonText>
          <CommandName>Test</CommandName>
        </Strings>
      </Menu>

      <Menu guid="Test" id="TestMenu_1" priority="0x111" type="Menu">
        <Parent guid="Test" id="TestGroup"/>
        <Strings>
          <ButtonText>Test1</ButtonText>
          <CommandName>Test1</CommandName>
        </Strings>
      </Menu>
      
    </Menus>

    <Groups>
      <Group guid="Test" id="TestGroup" priority="0x0001">
        <Parent guid="Test" id="TestMenu"/>
      </Group>
      <Group guid="Test" id="TestGroup_1" priority="0x0001">
        <Parent guid="Test" id="TestMenu_1"/>
      </Group>
    </Groups>

    <Buttons>
      <Button guid="Test" id="TestButton" priority="0x0001">
        <Parent guid="Test" id="TestGroup_1"/>
        <Strings>
          <ButtonText> TestButton </ButtonText>
          <CommandName> TestButton </CommandName>
        </Strings>
      </Button>
    </Buttons>

    <Bitmaps>
      <Bitmap guid="guidImages" href="Resources\Images.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows"/>
    </Bitmaps>
  </Commands>


  <Symbols>
    <GuidSymbol name="guidVSPackage2Pkg" value="{02d50a69-ed3d-4746-b813-68058f7f8391}" />

    <GuidSymbol name="Test" value="{fccdf8a0-8d64-4ff4-bd4e-6bc8447e0dca}">
      <IDSymbol name="TestMenu" value="0x1001"/>
      <IDSymbol name="TestMenu_1" value="0x1004"/>
      <IDSymbol name="TestGroup" value="0x1002"/>
      <IDSymbol name="TestGroup_1" value="0x1005"/>
      <IDSymbol name="TestButton" value="0x1003"/>
    </GuidSymbol>

    <GuidSymbol name="guidImages" value="{9da08d48-0438-4528-8cce-f3432f3f4218}" >
      <IDSymbol name="bmpPic1" value="1" />
      <IDSymbol name="bmpPic2" value="2" />
      <IDSymbol name="bmpPicSearch" value="3" />
      <IDSymbol name="bmpPicX" value="4" />
      <IDSymbol name="bmpPicArrows" value="5" />
      <IDSymbol name="bmpPicStrikethrough" value="6" />
    </GuidSymbol>
  </Symbols>

</CommandTable>

上面的結(jié)構(gòu)已經(jīng)指出饶唤,要想實(shí)現(xiàn)這個(gè)效果,要有2個(gè)Group贯钩,兩個(gè)Menu(一個(gè)是在頂部的Test募狂,一個(gè)是Test1),以及一個(gè)Button角雷。
但是他們之間誰(shuí)包含誰(shuí)又該如何確認(rèn)熬尺?誰(shuí)是誰(shuí)又該如何區(qū)分?

  • 唯一標(biāo)識(shí)GUID和ID
    • GUID
      標(biāo)示一個(gè)窗口谓罗,或者一個(gè)菜單粱哼,比如之前的Test菜單,它就有一個(gè)唯一的GUID來(lái)標(biāo)示它檩咱,它是唯一的揭措,會(huì)根據(jù)硬件以及IP等等軟硬件生成一個(gè)全球獨(dú)一無(wú)二的標(biāo)志,可以在在線生成網(wǎng)站來(lái)生成刻蚯。除了系統(tǒng)已經(jīng)定義的菜單绊含,我們自己寫的時(shí)候,這個(gè)GUID是沒有固定的炊汹,只要按規(guī)則生成即可
    • ID
      GUID之內(nèi)的邏輯標(biāo)志躬充,什么意思?嗯,我們知道在Test下有一個(gè)Test1菜單充甚,這個(gè)Test1是屬于Test的以政,它的GUid也是Test的Guid,但如果有個(gè)Test2伴找,如何區(qū)分呢盈蛮,這就用到了ID了,它是在Guid下的一個(gè)唯一標(biāo)示技矮,用來(lái)區(qū)分某個(gè)Guid下的控件抖誉,舉個(gè)例子,Guid是國(guó)名(中國(guó))衰倦,ID是中國(guó)的一個(gè)人的人名(張小凡)

有了這兩個(gè)標(biāo)志袒炉,每個(gè)控件都有了自己的唯一標(biāo)識(shí),這解決了如何區(qū)分的問題樊零。
<Parent guid="guidSHLMainMenu" id="IDG_VS_MM_BUILDDEBUGRUN" />
這是依托在vs原有的邏輯分組中梳杏,IDG_VS_MM_BUILDDEBUGRUN是包含“生成”和“調(diào)試”菜單的邏輯組。
如何知道誰(shuí)包含誰(shuí)淹接?這便要用到parent這個(gè)字段。
<Parent guid="Test" id="TestGroup"/>
其中又包含兩個(gè)字段叛溢,正是GUID和ID塑悼,如此便知道了自己是屬于誰(shuí)的。
至于其他的字段楷掉,都是很字面的意思厢蒜,一看便知。

3.GuidSymbol

GuidSymbol 包含了很多條IDSymbol烹植,GuidSymbol 用來(lái)定義一個(gè)GUID的斑鸦,這其實(shí)相當(dāng)于一個(gè)常量定義,不然你在用GUID的時(shí)候都要復(fù)制一長(zhǎng)串的字符串草雕。
IDSymbol自然是在GUID下的一些控件了巷屿,value就是ID了。

4.如何獲取GUID

上面的代碼是依附在主菜單上的墩虹,如果想在文件菜單下嘱巾,或者編輯菜單下應(yīng)該如何獲取對(duì)應(yīng)的GUID和ID呢。
https://msdn.microsoft.com/en-us/library/cc826118.aspx
或者
打開注冊(cè)表
編輯器(打開運(yùn)行窗口诫钓,輸入regedit)旬昭,在[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\General]找到該路徑,右擊-新建-DWORD(32-位)值(D)菌湃,建立一個(gè)注冊(cè)文件问拘,將其命名為EnableVSIPLogging,并將其值改為1。按下Ctrl+Shift骤坐,用鼠標(biāo)點(diǎn)擊VS里的菜單绪杏,就會(huì)彈出一個(gè)VSDebug Message窗口,如圖-6所示:


其中Guid和CmdID值就是我們需要的或油,NameLoc表示我們點(diǎn)擊的菜單名稱寞忿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市顶岸,隨后出現(xiàn)的幾起案子腔彰,更是在濱河造成了極大的恐慌,老刑警劉巖辖佣,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霹抛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡卷谈,警方通過查閱死者的電腦和手機(jī)杯拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)世蔗,“玉大人端逼,你說我怎么就攤上這事∥哿埽” “怎么了顶滩?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)寸爆。 經(jīng)常有香客問我礁鲁,道長(zhǎng),這世上最難降的妖魔是什么赁豆? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任仅醇,我火速辦了婚禮,結(jié)果婚禮上魔种,老公的妹妹穿的比我還像新娘析二。我一直安慰自己,他們只是感情好节预,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布甲抖。 她就那樣靜靜地躺著,像睡著了一般心铃。 火紅的嫁衣襯著肌膚如雪准谚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天去扣,我揣著相機(jī)與錄音柱衔,去河邊找鬼樊破。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唆铐,可吹牛的內(nèi)容都是我干的哲戚。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼艾岂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顺少!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起王浴,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脆炎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后氓辣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秒裕,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年钞啸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了几蜻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡体斩,死狀恐怖梭稚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情絮吵,我是刑警寧澤弧烤,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站源武,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏想幻。R本人自食惡果不足惜粱栖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脏毯。 院中可真熱鬧闹究,春花似錦、人聲如沸食店。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吉嫩。三九已至价认,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間自娩,已是汗流浹背用踩。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脐彩。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓碎乃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惠奸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梅誓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容