程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 用VC6實現IE工具欄

用VC6實現IE工具欄

編輯:關於VC++

平時一直喜歡用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 用來處理加速鍵。

下圖就是實現的一個簡單示例。

從上面的接口情況,我們應該很清楚應該怎麼做了:

在IObjectWithSite接口的SetSite方法中創建你的工具欄窗口,至於樣式什麼的,你可以隨意發揮。值得注意的是,最好先創建一個子窗口,然後以這個子窗口作為你的工具欄的父窗口。

在IDeskBand的GetBarInfo方法中,確定你的工具欄的屬性。比如說,高度、寬度、標題等等。

具體實現請參考示例程序代碼,限於篇幅原因,沒有把如何創建輸入控件,比如說,編輯框、下拉框等等的實現。有興趣的同志可以關注我的下一篇文章。

最後還要向IE注冊我們的工具欄,以下是一個簡單示例。

到此為止,IE工具欄基本完成,編譯完以後,你可以打開IE,看到自己的工具欄。也有可能第一次看不到,這個時候你可以選擇IE上的“視圖”菜單中的“工具欄”子菜單,然後選擇你的工具欄,這樣你就可以看到你的工具欄出來啦!

遺留的一些問題:

XP風格的工具欄做不出來,有知道的朋友可以告訴我一聲。

工具欄上的按鈕不能實現任意圖片、任意尺寸大小。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved