コンボボックスのフォーカスの色を透明にするには?

解決


hogehoge  2004-08-18 22:14:58  No: 54248

hogehogeと申します。
VC6.0(Win2K)でダイアログベース(MFC)で開発しております。

コンボボックスにフォーカスが当たると青色になりますが、
その色を透明にする方法を探しております(点線の枠は表示されてもかまわない)。
プッシュボタンや、リストビューなどで枠線のみのフォーカスがあるので
やり様によっては出来るようにも思えます。

この方法をご存知の方または既に実施された方がいらっしゃいましたらご教授願います。


tetuya  2004-08-20 02:14:47  No: 54249

>コンボボックスにフォーカスが当たると青色になりますが、
青とは限りませんよ。画面のプロパティでどの色にも設定できますから。

派生クラスを作ってDrawItemを自分で実装するのが確実ですね。

  if(lpDrawItemStruct->itemState & ODS_SELECTED ) //選択されている時
    {
      pDC->FillSolidRect( &rect , ::GetSysColor(COLOR_HIGHLIGHT) ) ;
    }
  else  // 選択されていない時
    {
      pDC->FillSolidRect(&rect , ::GetSysColor(COLOR_WINDOW ) ) ;
    }
こんな感じ。


hogehoge  2004-08-27 02:35:30  No: 54250

tetuyaさん回答ありがとうございます。
また文章に不備があったことを誤らなければなりません。
恐らくtetuyaさんにはコンボボックスアイテム描画時の回答をして頂いたと思いますが、
私が行いたかったのはコンボボックスにフォーカスが当たった瞬間(つまりアイテムは未選択の状態)にフォーカス色を透明にする事です。
(類似例としてブラウザのアドレスバーのエディット部分をワンクリックした状態です)

これに関しては自己レスと言うか妥協策として、

1.コンボボックスの背景色とテキスト色を取得
2.SetFocus()の瞬間にGetSysColor()を使ってハイライト色を保存。
  その直後コンボボックスの背景色にする(テキスト色も便宜変更する)
3.KillFocus()の瞬間にハイライト色を保存していた色に戻す(無論テキスト色も)

と言う方法を採りました。
少し不安は残りますが…(^^


hogehoge  2004-08-27 02:36:05  No: 54251

一応解決と言う事でマークさせて頂きます


てつや  2004-09-01 22:24:30  No: 54252

フォーカス色はシステムで管理しているのでそれを瞬間でも変えるのは
ちょっと危険かもしれません。(アサートした時とか)
OnSetfocusでSetEditSel(-1 ,-1 )として選択を解除するという方法も
あると思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加