« 分類した後また悩む | メイン | FBX形式 »

2004年11月25日

キリカ・グライト開発日誌:: C++ Builderでメニューハンドラを共通化

    

メニューがクリックされた時のイベントハンドラは共通にしたい。
しかし、前回はどのメニューが押されたのか判別する手段がわからずに、似たようなメソッドを大量に作ってしまっていた。
メソッドの中身は、
SetActiveTag(TAGTYPE_cancelautomode);
をコールするのみで、引数の定数値が違うだけだった。
面倒だから置換でコードを生成するというアホさだった。明らかにメンテナンス性が悪い。
で、今回は注意深くヘルプを読んだ。
するとint Tagプロパティがあった。
ヘルプには"Tag は,あらかじめ定義された意味のあるプロパティではありません。Tag プロパティは,開発時の利便性のために提供されます。追加の整数値を格納したり,コンポーネント参照またはポインタなどの 32 ビット値に型キャストできます。"と書かれている。
たぶん、今回のような用途に使うんだろう。
これを使えばすべてのメソッドを共通に出来、中身は、
SetActiveTag(reinterpret_cast(Sender)->Tag);
とすればいいはずだ。
タグのグループ分けはマスクにして、配列を作り、その配列の全要素とorをとって真となった要素をメニューに追加。
同時に、メニュー文字列も配列にしておけばいい。
って言うか、そう言う作り方が当たり前だろう。
前のはどう考えてもアホだった。まあ、この文章の方法のようにしたいと思っていたが出来なかったので、苦渋の選択をしたのだが。
ま、なんにせよ、これでメニューはさっくり出来る。



投稿者 Takenori : 2004年11月25日 11:58




comments powered by Disqus
Total : Today : Yesterday : なかのひと