プログラミング

WTLで、ツールバーのアイコンをクリックしてチェックを付けたときにアイコンの画像が差し替わるように拡張されたツールバーが見つけられなかったので、自分で処理を書く事にしたんだけれど、なんだか手間取った。

反射してくるメッセージから、どのButtonがClickされたかを識別する方法がわからない。出来れば汎用的なコントロールを作りたかったけど諦める事にした。

ツールバーのリソースからイメージリストを作ってくれる関数が公開されていたのでそれを使って得たイメージリストと元もとのイメージリストを差し替える事にした。
http://www.dinop.com/vc/loadtoolbarresource.html
丸々差し替えてしまうやり方だと複数のチェック付いたボタンのアイコンを差し替えたい場合には使えいだろうから、表示用のイメージリスト自体の差し替えではなくて表示用のイメージリストの中の画像を入れ替えるようにした方が良いんだろうなぁ。

Windowsの標準コントロールツールバー(といってもツールバーはIE3や4とかの時期に更新されたんだろうか?)は、3種類の状態用に画像を設定出来るようになっている。

しかしチェック状態のは設定が出来ないのが残念。これが元々設定出来るように作られていたなら何も自作する必要が無かったのに!

.NET FrameworkのWinFormsだと殆ど頭を働かせないでイベントでsenderを弄るだけで楽にアイコンの差し替えが実現できるから、それと比べると結構手間の違いが大きい。IDEの補助の度合いも結構差が開いてきた感じだし、今度作るアプリは.NETで組んでみようかな…。

ただWinFormsの場合、レガシーなWindowsの標準コントロールを使うので、必要に応じて標準コントロールの機能を拡張する場合、MFCWTLの場合と同様、基底の実装は同様にブラックボックスだし、実装で結局WindowsAPI使ったりメッセージ処理したりする事が多いので、それならMFCとかWTLのが自然に実装出来る気がする。