開発じたばた日誌

前へ●●●次へ
じたばた日誌目次へ戻る
TSUCHY Softへ戻る


FileSum ツールバー編


 ツールバーもMFCのウィザードでただで手に入ります。単にボタンを追加するだけならそんなにはまるのもではありません。 ではFileSumのツールバーは普通のツールバーとどこが違うのでしょうか?

 ドライブボタンです。ドライブボタンであるということは、ソフトを作るときにはボタンをいくつ用意すればいいかわからないということです。 たとえば私のPCはドライブがA,C,D,E,F,G,H,Iの8つですが、あなたのドライブはA,B,C,D,E,F,G,H,I,J,K,L,M,N,(しつこい)かもしれません。 つまり実行段階であなたのドライブを調べてダイナミックに(この表現はかっこいいね)ボタンをつくらなくてはいけません。

 またボタンにはID(名前というか番号のようなもの)というのがあって、ボタンが押されたときWindowsからは このIDがメッセージと一緒にやってきます。ところが実行段階までこのIDがいったいどれだけ必要なのかわからない ということは、メッセージハンドラをどれだけ用意すればいいかわからないということになります。

 しかたがないのでメッセージハンドラを個別につくるのはやめて、WindowProcをオーバーライドするという手を使いました。

 ところがダイナミックに作成したボタンがイネーブル状態(クリックして反応する状態)にならないじゃないですか。 これはいったいどういうことだ!!オレはEnableWindow(FALSE)なんてやった覚えはないぞ!!

 ボタンに対してEnableWindow(TRUE)をやって有効にできたかどうかは記憶があやふやなのですが、とにかく FileSumのメインウィンドウの基本クラスCFrameWndでは、デフォルトの設定でメッセージハンドラのないメニューとか ツールバーのボタンはディゼーブルになるんだそうです。

 ああまったく頭にくる。こんなおせっかいだれが頼んだというんだ。ディゼーブルにしたいんなら自分でするわい。 なんてセンスが悪いんだ。デフォルトでは勝手なことをしないようにしておいてほしい。

 やっとイネーブルにできた。こんなくだらないことで100万年も使ってしまった。 気を取り直してボタンに絵を描いてみよう!!そう、あこがれのビットマップボタン。 こんなものにあこがれるなんて気持ち悪いやつなんて思わないでね。VBではできなかったことなんだから。

 でもやっぱりはまるんだ。VBみたいにいかんなあ。でも産みの苦しみ。我慢我慢。