插入類庫超鏈接
MTPS是用來返回內(nèi)容的,所以我們無法從返回的數(shù)據(jù)中得知節(jié)點(diǎn)所對(duì)應(yīng)的超鏈接。那么,我們?nèi)绾潍@取節(jié)點(diǎn)所對(duì)應(yīng)的超鏈接呢?如果無法獲得,那么我們之前所做的就白費(fèi)了。Google一下"MSDN MPTS"關(guān)鍵字,發(fā)現(xiàn)Tim Ewald曾經(jīng)在某期MSDN雜志上介紹過MSDN的超鏈接的設(shè)計(jì)思路,并從中得知如何推斷出節(jié)點(diǎn)所對(duì)應(yīng)的超鏈接。
推斷節(jié)點(diǎn)所對(duì)應(yīng)的超鏈接需要我們提供該節(jié)點(diǎn)的short ID,然而,除了我們手動(dòng)賦之予short ID的根節(jié)點(diǎn)外,其下任一節(jié)點(diǎn)的Target屬性所包含的標(biāo)識(shí)符都是asset ID,這就意味著我們需要做一次轉(zhuǎn)換了:
Code 9
getContentResponse.contentId公共字段并非指代內(nèi)容節(jié)點(diǎn)的ID,而是指代short ID,無論該節(jié)點(diǎn)是導(dǎo)航節(jié)點(diǎn)還是內(nèi)容節(jié)點(diǎn),這是歷史遺留問題,如果你讀了第二課堂欄推薦的文章,你會(huì)發(fā)現(xiàn)這點(diǎn)微小的混亂。
接著,我為TocNode提供一個(gè)TargetUrl屬性,用于返回當(dāng)前節(jié)點(diǎn)所指向的內(nèi)容的超鏈接:
Code 10
值得注意的是,我在這里使用了m_TargetUrl對(duì)超鏈接進(jìn)行緩存,以保證該方法對(duì)于每個(gè)節(jié)點(diǎn)僅產(chǎn)生一次網(wǎng)絡(luò)訪問。
接下來就是本回的主角了,我希望右擊TreeView上的節(jié)點(diǎn)時(shí)彈出一個(gè)菜單,里面包含一個(gè)Insert菜單項(xiàng),當(dāng)我點(diǎn)擊這個(gè)菜單項(xiàng)時(shí),在當(dāng)前文檔的光標(biāo)處插入這個(gè)節(jié)點(diǎn)對(duì)應(yīng)的連接。下面是Insert菜單項(xiàng)的Click事件委托:
Code 11
最后,要使Insert菜單項(xiàng)生效,我們必須把菜單掛接到節(jié)點(diǎn)上,這可以通過處理TreeView的NodeMouseClick事件做到:
Code 12
故技重施
雖然插入類庫連接的功能已經(jīng)可用,然而TocView也遇到了"我的博客"側(cè)邊欄曾經(jīng)遇到的問題:
隨word啟動(dòng),而不是由用戶根據(jù)需要啟動(dòng);
當(dāng)打開多個(gè)Word窗口時(shí),僅顯示在第一個(gè)打開的窗口里。
對(duì)于這兩個(gè)問題,我將會(huì)使用《探索 Word 2007 開發(fā)(二):擴(kuò)展 Ribbon》和《探索 Word 2007 開發(fā)(三):管理側(cè)欄》這兩篇文章里提到的方法來處理。首先,創(chuàng)建一個(gè)Ribbon:
圖 1
然后,就是移植MyBlogsPaneManager過來管理TocView了。我當(dāng)然可以直接把MyBlogsPaneManager里面關(guān)于"我的博客"側(cè)邊欄的東西換成與TocView對(duì)應(yīng)的,然而,我希望讓MyBlogsPaneManager更通用,以便將來在遇到關(guān)于側(cè)邊欄管理問題可以直接使用。MyBlogsPaneManager的核心部分要數(shù)GetMyBlogsPane()方法了,要讓它變得通用,必須把里面和"我的博客"側(cè)邊欄相關(guān)的東西泛化,下面是該方法的改版代碼:
Code 13
需要說明的是,m_CustomTaskPanePool來自Globals.ThisAddIn.CustomTaskPanes,而后者里只存放當(dāng)前插件添加進(jìn)去的側(cè)邊欄,再加上同一個(gè)Word窗口里相同類型的側(cè)邊欄只會(huì)出現(xiàn)一次,于是,在上述代碼里,我通過側(cè)邊欄的父窗口和所含控件的類型來進(jìn)行判等是合理的。另外,由于添加側(cè)邊欄需要提供標(biāo)題,而標(biāo)題和控件的類型又是一一對(duì)應(yīng)的,于是,我使用了一個(gè)Dictionary<Type, string>來存放這些對(duì)應(yīng)信息。要注冊(cè)該信息,可以使用下面這個(gè)方法:
相關(guān)閱讀