熊「ツールバーが動くようになったらしい」


Windowを登録する

早いもので、今回で第1章12節まで来ました。

熊「目標は3章16節か?」

いや、1章20節くらいで終わると思うけど。

それはさておき、先回はツールバクラスを作るところまで行きましたが、
クラスを作っただけではIEとは何の結びつきもないので、IEツールバーとしては操作できません。

実際にツールバーを実装する為には、Windowを作ってそこに作成したツールバーを子要素として持たせ、
IOleWindowGetWindow時に、そのWindowハンドルを返して上げる必要があります。

ツールバーとWindowの菅家については、普通のWindowsプログラミングで、
WS_OVERLAPPEDWINDOWなウィンドウにツールバー取り付けるのと同じ感じになります。

ツールバー自体の実装方法について詳しくない場合は、この辺参照で
http://www.kumei.ne.jp/c_lang/sdk/sdk_61.htm

熊「コンセプトだけじゃなく解説まで頼るか」

すいません


KumaBarBandにCWindowImplを継承させる

KBBarやMotleyFoolの例を見ると、ReflectionWindowという何もしないWS_CHILDなWindowを作って、
それを親とするツールバーを作るみたいな形で実装をしています。

が、そうやって作るのがなんとなく気分じゃなかったので、GoogleCodeSearchで他のやり方を探していたら、
Bandクラス自体にCWindowImplを継承させるという方法が載ってました。
このやり方もどうかとは思いますが、とりあえずそれで実装して見ます。


KumaBarBand.h

CWindowImplを継承します。
CWindowImpl実装クラスに必要なマクロ、DECLARE_WND_CLASSとBEGIN_MSG_MAPを書きます。
後は、デストラクタが必要になったので用意して、なんとなくコンストラクタを外出ししました。

詳しい実装はリンク先を見てください。
赤文字が今回追加した部分になります。

KumaBarBand.h


KumaBarBand.cpp

デストラクタを追加しました
WindowをDestroyしてます

あとはGetWindowの処理を書いてます
QueryInterfaceとかreleaseしなくていいように、CComQIPtrを頼りました。

KumaBarBand.cpp


ビルド

ビルドして、IEを立ち上げて、ツールバー辺りをクリックしてみてください

熊「センスのないメッセージが出たな」

センスない言うな


HOME    次へ


コメントスペース