探索 Word 2007 开发(一):我的博客
 
创建 Word 2007 插件项目
        这里,我将会使用Visual Studio 2008 Beta 2所带的VSTOVisual Studio Tools for Office)来开发这个插件,此外,Office 2007也是必须的。
Figure 1
        如上图所示,你首先需要确保选择了 .NET Framework 3.5的项目,接着选择Visual C#\Office\2007\Word Add-in作为项目模板(当然,你也可以选择Visual Basic下面的那个),然后依次输入解决方案名字和项目名字,最后按下OK完成项目的创建。
Figure 2
        我们的项目包含了一个名为ThisAddIn.cs的代码档,里面的ThisAddIn类就是我们的插件了。现在,我希望为Word 2007创建一个像Research那样的侧边栏,里面将包含与我的博客相关的信息:
Figure 3
 
创建"我的博客"侧边栏
        我不清楚以往怎样才能做到这样,但现在有了VSTO,你可以把以往所学的Windows Forms的技巧都用上,实际上,这样一个侧边栏就是一个用户控件(User Control)。现在,我们就来开发"我的博客"侧边栏。首先,在项目里添加一个名为MyBlogsUserControl的用户控件,接着在它上面拖放下列控件:
cbxBlogs:用于显示博客列表
btnViewBlog:在Internet Explorer中打开选定博客的主页
lbxRecentPosts:列出选定博客最近发布的帖子
btnViewPost:在Internet Explorer中打开选定帖子的网页
lbxDrafts:列出存在本地没有发布的帖子草稿
btnOpenDraft:在Word 2007中打开选定的帖子草稿
MyBlogsUserControlVisual Studio中的设计如下图所示:
Figure 4
        接下来就是把MyBlogsUserControl嵌到Word 2007里了,要做到这样,最简单的办法就是在插件启动的时候,以Custom Task Pane的方式加载控件。回到ThisAddIn.cs,我们可以看到,Visual Studio为我们准备好插件的Startup事件的Event Handler了:
 
        这样,我们只需要在方法里面插入下面的代码:
 
        作为应用程序级别(application-level)的扩展,Office 2007引入了Custom Task Pane这个概念,然而,直接通过Office PIA使用Custom Task Pane比较繁琐,于是,VSTO提供了一个简化方案,正如Code #02所示的那样。
增值服务区
Creating Custom Task Panes Using Visual Studio Tools for OfficeRobert Green
Creating Custom Task Panes in the 2007 Office SystemMark O'Hara and Frank Rice
        当然,别忘了引用VSTO的命名空间:
 
考验脑力区
using关键词共有多少种用法?它们分别是什么?
        现在来看看运行效果:
Figure 5
        到目前为止,"我的博客"侧边栏只是一个"空壳",接下来就是着手实现里面的逻辑了。
 
填充"我的博客"侧边栏
        假设"我的博客"侧边栏的相关档安置在My Blogs文件夹里,该文件夹的结构如下图所示:
Figure 6
        虽然我们可以通过枚举My Blogs的子文件夹来填充cbxBlogs控件,然而我希望设计一个
类来表示博客并且实现一定的资料绑定。回顾Figure 4"我的博客"侧边栏应该具备如下特性:
它会在启动时读取My Blogs文件夹里的相关信息,并且填充 cbxBlogs控件;
1.当我们在博客列表中选择某个博客时,它会通过RSS获取该博客最近发布的帖子,并且填充lbxRecentPosts控件;
2.当我们在博客列表中选择某个博客时,它会读取该博客帖子草稿文件夹里的数据,并且填充lbxDrafts控件;
3.当我们在博客列表中选择某个博客时,按下View Blog按钮将会在Internet Explorer中打开该博客的主页;
4.当我们在最近帖子列表中选择某个帖子时,按下View Post按钮将会在Internet Explorer中打开该帖子的网页;
5.当我们在草稿列表中选择某个草稿时,按下Open Draft按钮将会在新的Word 2007中打开该草稿。
        明确这些需求后,我们就可以着手写代码了:
 
 
 
        对于Code #03,以下几点是需要说明的:
PostDraftBlogpane类都重写了ToString()方法,这是因为ComboBoxListBox等控件会调用该方法并把返回的字符串用作条目的显示,重写该方法是为了让条目得到正确的显示。当然,如果你结合DataSourceDisplayMember来使用,也可以不重写ToString()方法。
Blog.GetRecentPosts()方法里使用Argotic Syndication Framework来进行RSS信息处理,所以你需要下载并安装它,然后在项目中引用相关的类库和Argotic.Core.Rss命名空间。
Blog.GetRecentPosts()方法里对RSS地址进行了假设,这个假设适用于博客园以及旗下其它网站,当然,你可以想出很多方法让它具备普遍适用性。
Blog.GetRecentPosts()方法里使用NetworkInterface. GetIsNetworkAvailable()方法判断当前网络是否连通,如果连通则获取数据,否则返回空数组。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。