officeba > 单独文章


引用.NET Framework Class Library 在线文档2——Word2007高级应用

插入类库超链接

MTPS是用来返回内容的,所以我们无法从返回的数据中得知节点所对应的超链接。那么,我们如何获取节点所对应的超链接呢?如果无法获得,那么我们之前所做的就白费了。Google一下"MSDN MPTS"关键字,发现Tim Ewald曾经在某期MSDN杂志上介绍过MSDN的超链接的设计思路,并从中得知如何推断出节点所对应的超链接。

推断节点所对应的超链接需要我们提供该节点的short ID,然而,除了我们手动赋之予short ID的根节点外,其下任一节点的Target属性所包含的标识符都是asset ID,这就意味着我们需要做一次转换了:

 

Code 9

getContentResponse.contentId公共字段并非指代内容节点的ID,而是指代short ID,无论该节点是导航节点还是内容节点,这是历史遗留问题,如果你读了第二课堂栏推荐的文章,你会发现这点微小的混乱。

接着,我为TocNode提供一个TargetUrl属性,用于返回当前节点所指向的内容的超链接:

 

Code 10

值得注意的是,我在这里使用了m_TargetUrl对超链接进行缓存,以保证该方法对于每个节点仅产生一次网络访问。

接下来就是本回的主角了,我希望右击TreeView上的节点时弹出一个菜单,里面包含一个Insert菜单项,当我点击这个菜单项时,在当前文档的光标处插入这个节点对应的连接。下面是Insert菜单项的Click事件委托:

 

Code 11

最后,要使Insert菜单项生效,我们必须把菜单挂接到节点上,这可以通过处理TreeView的NodeMouseClick事件做到:

 

Code 12

 

故技重施

虽然插入类库连接的功能已经可用,然而TocView也遇到了"我的博客"侧边栏曾经遇到的问题:

随Word启动,而不是由用户根据需要启动;
当打开多个Word窗口时,仅显示在第一个打开的窗口里。
对于这两个问题,我将会使用《探索 Word 2007 开发(二):扩展 Ribbon》和《探索 Word 2007 开发(三):管理侧栏》这两篇文章里提到的方法来处理。首先,创建一个Ribbon:

 

图   1

然后,就是移植MyBlogsPaneManager过来管理TocView了。我当然可以直接把MyBlogsPaneManager里面关于"我的博客"侧边栏的东西换成与TocView对应的,然而,我希望让MyBlogsPaneManager更通用,以便将来在遇到关于侧边栏管理问题可以直接使用。MyBlogsPaneManager的核心部分要数GetMyBlogsPane()方法了,要让它变得通用,必须把里面和"我的博客"侧边栏相关的东西泛化,下面是该方法的改版代码:

 

Code 13

需要说明的是,m_CustomTaskPanePool来自Globals.ThisAddIn.CustomTaskPanes,而后者里只存放当前插件添加进去的侧边栏,再加上同一个Word窗口里相同类型的侧边栏只会出现一次,于是,在上述代码里,我通过侧边栏的父窗口和所含控件的类型来进行判等是合理的。另外,由于添加侧边栏需要提供标题,而标题和控件的类型又是一一对应的,于是,我使用了一个Dictionary<Type, string>来存放这些对应信息。要注册该信息,可以使用下面这个方法:

 

Code 14

那么,谁应该注册该信息,以及在哪里注册该信息呢?我认为注册该信息的责任应该落在控件的头上,再者,该信息是与控件的类型而不是实例相关的,于是,我把注册该信息的代码放在控件的静态构造函数里:

 

Code 15

剩下的就是挂接相关的事件委托和处理状态的同步了,这些都和"我的博客"侧边栏的做法大同小异,这里就不重复了。

 

更多选择

还差点什么呢?语言!留意下面这幅截图:

 

图   2

Class、Members、Constructor、Methods以及节点所指向的内容均为英文,我希望可以选择用于显示的语言。于是,我为插件创建了一个选项窗口:

 

图   3

并在它的Load事件委托里处理当前语言下拉列表的初始化,并读取配置文件中的语言信息:

 

Code 16

我们确实可以避免在这里硬编码,然而,就目前来说,提供简体中文、繁体中文和英文已经足够了,除非你打算把它变成产品,并进军全球市场。当用户选好语言并点击OK按钮时,语言信息将会保存到配置文件里:

 

Code 17

Class Library Options窗口是通过侧边栏右下角新添加的Options按钮启动的,当语言信息改变了,TreeView也应该刷新根节点:

 

Code 18

需要说明的是,我不再指定Version的值,这将告诉MTPS获取最新的发布版本 (非预发行版,包括Beta版和CTP版),而Locale则与配置文件里的语言信息相对应,这意味着插入的超链接所指向的页面将与配置文件里德语言信息相对应。下面是运行效果的截图:

 

图   4

 

至此,Class Library侧边栏的开发要告一段落了,虽然此时我的脑海里又冒出了新的需求,或者你也对它有了新的想法。


声明:欢迎各大网站转载本站文章,还请保留一条能直接指向本站的超级链接,谢谢!

时间:2008-02-13 12:33:55,点击:65824


【OfficeBa论坛】:阅读本文时遇到了什么问题,可以到论坛进行交流!Excel专家邮件:342327115@qq.com(大家在Excel使用中遇到什么问题,可以咨询此邮箱)。

【声明】:以上文章或资料除注明为Office自创或编辑整理外,均为各方收集或网友推荐所得。其中摘录的内容以共享、研究为目的,不存在任何商业考虑。如有任何异议,请与本站联系,本站确认后将立即撤下。谢谢您的支持与理解!


相关评论

我要评论

评论内容