建立自訂的Explorer Bars(瀏覽器欄),Tool Bands(工具條欄)和Desk Bands(案頭工具條欄)
說明:這三種工具列都是com組件形式的,ie為了可以擴充它自己訂製了一套邏輯,只要我們寫的自己的
工具條按照它的邏輯來,當ie啟動的時候就會把我們的工具條載入上去。
實現這種邏輯很簡單,只要我們實現它相應的介面,然後把我們的工具條註冊到它指定的位置即可,他
啟動並執行時候就會去看註冊表資訊,下邊會具體說明如何填寫註冊表資訊。
1、Explorer Bars
IE->查看-〉瀏覽器欄中開啟一個你想要的瀏覽器欄
說明: 該功能是在ie4.0中被加上的,他是ie的一個子視窗而已,被用於顯示一些資訊。他分為兩種,
豎向的和縱向的。
2、Tool Bands(工具列)
IE-〉查看-〉工具列
說明:該功能是在ie5.0中被加上的,和我們平常用的ToolBar一樣。ie的ToolBar其實是個Rebar
Control,它相當於一個容器,它可以有一個或者多個子Band,它可以動態改變子band的位置和大小。
3、Desk Bands
右鍵工作列-〉工具列-〉選擇你要顯示的Desk Band
說明:該功能是和ie無關的,它主要是被顯示在工作列上便於使用者操作,MediaPlayer在xp下就有個
Desk Band,大家應該也都用過了。
大家可以去看看msdn:ms-help://MS.VSCC.2003/MS.MSDNQTR.2006JAN.1033/shellcc/platform/shell/programmersguide/shell_adv/bands.htm
Band對象的基礎知識
雖然這三種band看起來和一般的window視窗差不多,但是他是要宿主於容器之內的,原因很簡單它不過是
個com的組件而已。就像Explorer Bars被包含在IE瀏覽器中,DeskBands被包含Shell中。這幾個Band的實
現基本上一樣,不同的只是他們要註冊的位置和資訊不同而已。
除了IUnknown和IClassFactory(類廠介面,不用我們實現,atl給我們寫好了)外,所有的band對象都要
實現下面三個介面:
IDeskBand
IObjectWithSite
IPersistStream
在註冊Explorer Bars和Desk Bands時必須註冊為適當的組件類別為了確定該組件的類型和所在的容器,
ToolBand不同於他們,它不需用註冊類別因為它只有一種而且容器也不用指定。
Explorer Bars有兩種類別:
豎向的 ----> CATID_InfoBand
橫向的 ----> CATID_CommBand
DeskBand的類別: --〉CATID_DeskBand
如果band對象需要接受使用者的健盤輸入的話,那麼必須實現IInputObject介面。
如果Explorer Bar或者Desk Band需要支援捷徑功能表的話,那麼必須實現IContextMenu介面,Tool band不
支援該功能。
因為Band對象實現了一個子表單,所以它也應該能處理window訊息,Band對象能通過容器的
IOleCommandTarget介面去向容器Send訊息,該介面可以通過容器的IInputObjectSit結構QueryInterface
到,你接著可以通過IOleCommandTarget::Exec發送訊息。
Band的註冊說明:
每個Com都有一個Clsid,但是我們的band如果被安裝了那麼會在相應的容器裡面有個自己的菜單的以便來
控制顯示或者隱藏自己,這個菜單的字串一般都會被寫到註冊表中的:
HKEY_CLASSES_ROOT
CLSID
{你的Band對象的CLSID}
(Default) = 菜單的字串
InProcServer32
(Default) = DLL的全路徑
ThreadingModel= Apartment
IE的Tool Band除了要註冊上面的資訊外,還要在HKEY_LOCAL_MACHINE/Software/Microsoft/Internet Explorer/Toolbar
下面添加我們ToolBand的clasid的key這樣ie在啟動的時候才能認為它是個ie的toolBar外掛程式。
HKEY_LOCAL_MACHINE
Software
Microsoft
Internet Explorer
Toolbar
{你的Band對象的CLSID}
IE的Explorer Bar也同樣,就是key不一樣:
HKEY_CURRENT_USER
Software
Microsoft
Internet Explorer
Explorer Bars
{你的Band對象的CLSID}
BarSize