お仕事で調査中。めもめも。
- <URL:http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/bands.asp> MSDNの解説とサンプル
- http://www.myprofile.ne.jp/blog/archive/zerobase/34 - 関連blog
- http://cgi.members.interq.or.jp/earth/ryuk/bbs/test/read.cgi?bbs=zatsudan&key=1033991479
- http://www.nitoyon.com/vc/tips/ie_component.h-tm
- Toolband using WTL @ The Code Project
要するに、IEツールバーを作るには次のようにすればいいらしい。IE5以降でサポートされる。
- IObjectWithSite, IDeskBand, IPersistStream を実装したcoclassをつくる。
- coclassはinproc serverで利用できなくてはならない。つまりは、COMサーバーはDLLでないと駄目。とにかく、そういう形でレジストリにcoclassを登録する。
- それから、HKEY_LOCAL_MACHINE\software\microsoft\Internet Explorer\Toolbarに、"{coclass のCLSID}"という名前の値を登録する。型や中身はどうでもいいみたい?
IObjectWithSiteの実装はこんな感じ。
- ツールバーがactivateされるとき、 IObjectWithSite#SetSite が呼ばれる。パラメータのIUnknownインターフェースは、IOleWIndowをquery可能なので、これを使ってツールバーの親となるウィンドウの情報を取得する。MSDNのサンプルでは、このタイミングでツールバー本体のウィンドウを生成している。
- また、IInputObjectSiteもquery可能なので、あとで入力を処理するときにこれを使う。
- それから、単にツールバーとして表示されると言うだけでなく実質的な機能を提供するなら、このIUnknownでIWebBrowser2をqueryするのは必須。
- IObjectWithSite#GetSiteは単にSetSiteで渡されたIUnknownのQueryInterfaceに転送すればいいらしい。
IPersistStreamは、ツールバーの状態を保存するために適切なタイミングでIEがメソッドを呼んでくれるので、それを考えてよしなに実装。空実装してもとりあえずは問題なし。
IDeskBand::GetBandInfoはバーの大きさやらなんやらの情報を提供するMSDNのサンプルみたいな感じで適当に。