C# 中的漂亮 IE 工具栏






4.89/5 (38投票s)
本文描述了 IEToolbarEngine 的工作原理和使用方法。这是一个适用于 Internet Explorer 的工具栏,具有可重用的架构。

引言
我们的一位客户带着创建 Internet Explorer 商业工具栏的想法来找我们。这个想法很简单——有必要为 Internet Explorer 7.0 实现一个包含以下元素的工具栏:
- 公司徽标;
- 搜索框,允许将搜索请求发送到任意网站并在浏览器中显示结果;
- 展开按钮,包含任意数量的链接;
- 显示 RSS 频道的下拉列表。
我们开始着手这项任务,并从选择平台开始。事实证明,为一个声明了功能的 Internet Explorer 工具栏并不容易。有必要处理 Com 组件、与浏览器交互并将缓存的数据存储在某个地方。幸运的是,事实证明可以在 .NET 2.0 平台上完成所有工作,这大大简化了任务。
我们的工作成果如下——IEToolbarEngine 组件,为工具栏及其元素创建提供了高级接口。也许,这个组件将允许您实现自己的工具栏,或者您将在 MS Visual Studio 环境中找到一些有用的数据来实现您自己的项目。
用法
IEToolbarEngine
继承自 Pavel Zolnikov 编写的 BandObject
组件,并在文章“使用 .NET 和 Windows Forms 扩展 Explorer 的 Band Objects”中进行了描述。我们对其进行了修改,以便能够将我们的工具栏构建到 Internet Explorer 中。之后,我们编写了一个小型类库,用于将不同的元素添加到工具栏中。
总的来说,该工具栏本身是一个 UserControl
,上面放置了一个 System.Windows.Forms.ToolStrip
组件。加载此控件时,将激活 CreateToolbarItems
函数,该函数应引起高度重视,因为工具栏元素的初始设置主要在此函数中进行。您可以对其进行更改以创建自己的工具栏。其片段如下。
internal void CreateToolbarItems ()
{
try
{
…
//Get current assembly.
Assembly currentAssembly = Assembly.GetAssembly( this.GetType() );
//Links cration.
Link link1 = new Link("Home page", "http://kbsoft-group.com/");
Link link2 = new Link("Clear Search History",
IEToolbarEngine.WrapInternalCommand(IEToolbarEngine.cmdClearHistory));
//Getting image from resources
Image img = Image.FromStream( currentAssembly.GetManifestResourceStream(
"IEToolbarEngine.main.png") );
//Create toobar item.
menu = new MainMenu( this, "Company", "Main",
new Link[] { link1, link2 }, img);
//Add item to internal collection
items.Add (menu);
…
}
}
这里演示了创建单个工具栏元素,该元素包含一个徽标和一个简短的下拉菜单。使用 MainMenu
类创建了一个项。向其中添加了两个链接和一个图像。下面给出了显示工具栏元素简单架构的类图。
创建的元素看起来像这样:
标题文本、工具提示、链接数组(KeyValuePair<string, string>
类对象,其中 Key 是菜单项文本,Value 是单击后跳转的链接)以及来自程序集资源的图像链接被传递给 MainMenu
类的构造函数。
需要注意的是,对于好奇的人来说,嵌入到程序集中的资源的名称由默认命名空间名称和资源本身名称组成(因此,行 IEToolbarEngine.main.png
)。
创建后,有必要将新元素添加到 IEToolbarEngine
Items 类集合中。
本文附带的 IEToolbarEngine
项目演示了创建多个元素。让我们依次查看它们。
SearchBoxItem
new SearchBoxItem (this, "<clear>", "terms to serach!",
"http://www.google.ru/search?q={0}",
"Search here", "Search", "Click to search",new Size (160, 16),
FlatStyle.System, img);
SearchBoxItem
类本身就是一个搜索行和一个启动搜索的按钮。该行可以导航到支持通过 GET 请求指定的参数的任意网站。
构造函数指定了以下参数:指向 IEToolbarEngine
类的链接,将显示在组合框中用于清除搜索历史项的行,提示行,搜索行,弹出提示行,搜索按钮上的文本,搜索字段大小,其样式以及指向搜索按钮图像的链接。此元素的外观如下:
关于搜索行格式的几句话。其中有一个 q={0}
参数。这里 q
是搜索查询中使用的参数名,而 {0}
将自动替换为用户在搜索行中输入的行。如果搜索查询中有另一个参数名,则应将其替换为 q
。
LinkListItem
LinkListItem(this, "Advantages", "Advantages",
new Link[] { link1, link2, link3, link4 }, img);
简单的链接列表。构造函数参数——指向 IEToolbarEngine
类的链接,按钮文本,工具提示文本,元素数组。外部显示如下:
RssTicker
RssTicker(this, "RSS", "RSS Channel",
"http://www.euro2008.uefa.com/rss/index.xml", 1440, img, "RSSChannel");
此元素本身就是一个从 RSS feed 获取的链接列表。为此,将 RSS feed 的链接和频道更新周期传递给构造函数。最后必须传递一个字符串——RSS 频道的唯一名称,该名称将用于在“Application Data\IEToolbar\Cache”应用程序文件夹中创建缓存文件。
最终元素的外观如下:
安装项目
此外,演示项目还包含一个安装项目 IEToolbarInstallation
,该项目生成一个 Setup.exe 文件,允许您将工具栏安装到用户计算机并在需要时将其删除。它是由 MS Visual Studio 创建的。下面给出了与安装项目实现相关的需要注意的要点。
在工具栏程序集(IEToolbar.dll,由 IEToolbarEngine 项目创建)中有一个 IEToolbarInstaller
类,它继承自 System.Configuration.Install.Installer
。为了向安装程序表明此类的某个方法应该在安装过程中启动,它被标记了 RunInstallerAttribute
属性。Install
和 Uninstall
方法在此类中被重写。Install
实现将程序集注册为 COM 服务器。相应地,Uninstall
取消其注册。
使用 RegistrationServices
类的 RegisterAssembly
函数进行注册。需要注意的是,此程序集未安装在 GAC 中,因此注册应使用 AssemblyRegistrationFlags.SetCodeBase
密钥进行。为此,程序集必须是强命名的,否则注册可能会出错。
安装程序通过在项目中的“Custom Actions”部分添加一个新操作来接收指令,该指令在“custom action source”字段中选择了程序集的 IEToolbr.dll 文件,以搜索此类的构建并启动其 Install
和 Uninstall
操作。
BandObject
类 IEToolbarEngine
的基础包含 Register
和 Unregister
函数。Register
在注册过程中启动,并将必要的键添加到 Windows 注册表中,以便将工具栏嵌入 Internet Explorer。Unregister
在安装时启动,并从 Windows 注册表中删除与工具栏相关的信息。