以前取り組んでいたプロジェクトで視覚的なスマートさが求めれらた。私はユニークな視覚的エレメントのセットを作った。これらのコントロールの1つが BounceButton である。そのうち他のコントロールも投稿しよう。
弾むボタンは同じようなマッキントッシュのコントロールから思いついた。私は BouceButton をチェックボックスやラジオボタンのかわりに使っている。CBounceButton はMFCの CButton クラスから派生している。
CBounceButton は簡単に使える。ヘッダーファイルと実装ファイルをプロジェクトに追加し、BounceButton を使うダイアログやウィンドウのヘッダーファイルに #include する。
CBounceButton はオーナードローボタンだ。しかし自動的にBS_OWNERDRAW スタイルにセットされるので心配する必要ない。ダイアログリソースの中で、ボタンを作る。ボタンは普段より長くする必要がある。なぜならボタンとテキストは長方形の中に入っていなければならないからだ。CBounceButton はテキストをラップできるが、テキストのラップは良く見えるとは限らない。ボタンの境界はエンドユーザーには見えないのでサイズについては寛容になれる。サンプルのスクリーンショットを見ればどのようにすればいいかわかるだろう。
コードの中では普通のボタンを扱うのと同様に BounceButton を扱えばいい。CBounceButton はラジオボタンのように使えるようにするメソッドを提供している。サンプルは有効/無効のトグルの方法を示している。
CBounceButton はマウスに反応します。つまりマウスカーソルがボタンやテキストの上にきたとき、テキストの周りにフォーカス矩形が描かれます。私はこれをテストするために CRgn を使っていました。そうするとマウスが無関係の場所の上にあってもフォーカス矩形は表示されないのです。サンプルで示されているツールチップはこのテストでは提供されません。だからマウスがクライアント領域上のどこにあってもツールチップが表示されます。この振る舞いは私のアプリでは問題ないのですが、誰かいい解決法があったら教えてください。
CBounceButton は Unicode ではテストしていませんが、うまくいかない理由は無いと思います。サンプルプロジェクトはVC5でレベル4でコンパイルされました。このコードは誰でも使えますし、私への謝辞は必要ありませんが、CBounceButton コードの一部は私のものではないので、Chris 氏に感謝し、彼の謝辞リクエストに従ってください。
Chris Maunder 氏に感謝します。彼の多くの投稿はとても有益だった。ボタンの影の描画は彼の丸いボタンクラスから使わせてもらった。
Download demo project - 18.8 KB
Date Posted: May 6, 1999