ビットマップボタンについて

[戻る]
goo 2002/10/29(火) 12:14:58
VC++6.0 MFC Windows2000でアプリケーションを作成しています。
ボタンにビットマップを貼り付けて表示しているのですが、
ModifyStyleでボタンを無効にしたときに、ビットマップが灰色になって消えてしまいます。
無効用のビットマップを作成して、切り替えるという方法しか思い浮かばないのですが、
他にいい方法をご存じの方はいますでしょうか?

sugar 2002/10/29(火) 13:16:00
ここで言うビットマップボタンとは、
CBitmapButtonですか?
CButtonで、オーナー描画でビットマップを表示してるんですか?

goo 2002/10/29(火) 14:05:22
CButtonでオーナー描画しています。

sugar 2002/10/29(火) 14:55:25
「ビットマップが灰色になって消えてしまいます」という表現が微妙ですね。
「ビットマップがまるっきり表示されない」と読み替えて差し支えないでしょうか。

ボタンがDISABLEになった時、
DRAWITEMSTRUCT構造体のitemStateメンバにはODS_DISABLEDが
設定されていると思うのですが、
この時、ビットマップを描画するロジックに到達してますか?

オーナー描画の場合、DISABLEになったからといって、
ビットマップを自動的にエンボス加工してくれるわけではありません。
gooさんの仰る、DISABLE用のビットマップを別途準備する方法が
一番手っ取り早いと思います。

ビットマップの加工を動的に行いたい場合は、以下が参考になるのではないでしょうか。
これはビットマップがついたメニューのサンプルですが、
DISABLEになったメニューアイテムのビットマップを、動的にエンボス加工してます。

http://www.codeproject.com/menu/bcmenu.asp

PATIO 2002/10/29(火) 15:49:18
蛇足になりますが、
オーナー描画モードというのは何から何までプログラマーがコードを書かないと
何もしてくれないモードです。
ですから、ボタンコントロールに考えられる全ての状況を想定して全ての状況に
対応する描画ロジックを組み込まなければ、普通に提供されているボタンと同じ
振る舞いをさせることは出来ません。
オーナー描画をしておられるのであれば、おわかりかと思いますが、
ボタンのエッジも自分で描画しなくてはいけませんし、押された時の描画も自分で
やらなくてはいけません。

DRAWITEMSTRUCT構造体のitemStateメンバの状況を見て、ボタンが置かれた状況に
応じて必要なロジックが組み込まれているかを一度確認するべきでしょう。

goo 2002/10/29(火) 16:20:18
[[解決]]
ありがとうございました。
やはり自ら表示するコードを書く必要があるみたいですね。
便利なDLLとかないかなぁ〜。と感じてしまう方も多いのではないでしょうかね〜。

古いスレッドには追加発言できません。