WEB开发网
开发学院软件开发VC 用VC6实现IE工具栏 阅读

用VC6实现IE工具栏

 2009-02-21 20:00:07 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 平时一直喜欢用google在IE上的工具栏,于是也琢磨着写一个,用VC6实现IE工具栏,国内介绍这个的文章太少,走了不少弯路,这样你就可以看到你的工具栏出来啦!遗留的一些问题: XP风格的工具栏做不出来,有知道的朋友可以告诉我一声,于是把自己的一些经验总结一下,希望对后来人有帮助

本文示例源代码或素材下载

平时一直喜欢用google在IE上的工具栏,于是也琢磨着写一个。国内介绍这个的文章太少,走了不少弯路,于是把自己的一些经验总结一下,希望对后来人有帮助。

首先,IE工具栏是一个进程内组件,被动的由IE调用。这样就要先实现一个简单的ATL工程,这个就不用介绍了吧。如果这个都不知道的话,建议还是不要再看下去了。

然后,在你的这个ATL类,需要实现三个接口:IObjectWithSite 、IDeskBand和IInputObject。

IObjectWithSite 是 IE 用来对工具栏进行管理和通讯用的一个接口。这个接口有两个函数:SetSite() 和 GetSite()。当 IE 加载你的工具栏的时候,会调用 SetSite()函数。

  • IDeskBand 是IE用来确定工具栏属性的接口,有一个方法函数:GetBarInfo(),这个还属主要用来确定工具栏的一些属性,比如宽度,高度等等。

    IDockingWindow 是 IDeskBank 的基,IOleWindow 又是 IDockingWindow 的基类,所以这两个基类的接口也必须实现。

    IInputObject 接口是用来管理用户的输入的接口,有3个函数:UIActivateIO()、HasFocusIO()、TranslateAcceleratorIO()。当浏览器栏激活或失去活性的时候,IE 调用 UIActivateIO 函数,当 IE 需要判断哪个窗口有焦点的时候,它调用 HasFocusIO 。TranslateAcceleratorIO 用来处理加速键。

下图就是实现的一个简单示例。

用VC6实现IE工具栏

从上面的接口情况,我们应该很清楚应该怎么做了:

  • 在IObjectWithSite接口的SetSite方法中创建你的工具栏窗口,至于样式什么的,你可以随意发挥。值得注意的是,最好先创建一个子窗口,然后以这个子窗口作为你的工具栏的父窗口。

    在IDeskBand的GetBarInfo方法中,确定你的工具栏的属性。比如说,高度、宽度、标题等等。

具体实现请参考示例程序代码,限于篇幅原因,没有把如何创建输入控件,比如说,编辑框、下拉框等等的实现。有兴趣的同志可以关注我的下一篇文章。

最后还要向IE注册我们的工具栏,以下是一个简单示例。

用VC6实现IE工具栏

到此为止,IE工具栏基本完成,编译完以后,你可以打开IE,看到自己的工具栏。也有可能第一次看不到,这个时候你可以选择IE上的“视图”菜单中的“工具栏”子菜单,然后选择你的工具栏,这样你就可以看到你的工具栏出来啦!

遗留的一些问题:

XP风格的工具栏做不出来,有知道的朋友可以告诉我一声。

工具栏上的按钮不能实现任意图片、任意尺寸大小。

推荐阅读:

ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏

Tags:VC 实现 IE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接