OnCtlColor()で選択色

[戻る]
Z 2014/07/16(水) 11:51:55
VS2010とMFCで、OnCtlColor()でコントロールの色を変更しようと調べているのですが、
エディットボックスやリストボックスの選択色(標準で青背景+白文字)は、
変更することは可能なのでしょうか。

それとも、この部分の色を変えるだけで、
すべてオーナー描画になってしまうのでしょうか?

仲澤@失業者 2014/07/16(水) 14:18:36
選択文字色(=COLOR_HIGHLIGHTTEXT)、選択背景色(=COLOR_HIGHLIGHT)は、
SetSysColors()で設定することができますが、
全てのウインドウに影響しますので、自身のウインドウのみ変更したい場合は、
描画後に元に戻す必要があります。また、

1.OnCtlColor()やSetTextColor()を駆使しても
 色の設定ができない部分が存在する。

2.そもそも色の設定ができない標準コントロールが存在する。

3.色覚異常者等への配慮(アクセシビリティ)が求められ、
 これはOSが標準で提供しているので、プログラマは、
 これを邪魔しないように配慮を求められている。

4.さらに、最近のOSはデスクトップの配色は、一貫したテーマに沿って
 色設定を行うのが一般的なので、標準コントロールの色は
 いじらないことが推奨されている。

など、この手の努力はまったく報われません。
実験的にやってみるのは大いにお勧めしますが、
製品に実装するのは慎むべかと考えます。

仲澤@失業者 2014/07/16(水) 14:19:57
×慎むべかと考えます。
○慎むべきかと考えます。orz.

AR 2014/07/16(水) 15:11:51
リストコントロールであれば、オーナードローではなく、カスタムドローを使えば、選択
状態やフォーカス状態のステータスによって色分けと言ったことも比較的容易に実装可能
です。
エディットボックスはやろうと思ったことが無いので分かりません。
エディタを作りたいといった場合には必要になりそうですが、その場合はオーナードロー
じゃないと、そもそも十分な性能が出せないと思います。

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