Welcome

首页 / 软件开发 / C++ / 用VC6实现IE工具栏

用VC6实现IE工具栏2011-02-04 vckbase vc6man平时一直喜欢用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 用来处理加速键。

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