はじめまして。よろしくお願いします。
普通のウインドウのクライアント領域に、
hCombo = CreateWindowEx(0,WC_COMBOBOXEX, ....); //ドロップダウンリストを指定
で作成したコンボボックスを貼っているのですが、
①Edit部分の背景色、②list部分の背景色、③それぞれの文字色と文字背景色、の変更
はどうすればいいのでしょうか。
リストボックス(WC_LISTBOX)だと WM_CTLCOLORLISTBOX を捕まえて変更できたの
に...
様々な WM_CTLCOLOR***** を捕まえてみても変化なしです。
ご教授の程、お願いいたします。
環境>
Win2000
VC++6.0
SDK のみ
by 果実酒
行ごとに色分けする場合は、オーナー描画になると思います。
>リストボックス(WC_LISTBOX)だと WM_CTLCOLORLISTBOX を捕まえて変更できたの
>に...
そういうことなら、
コンボボックスをサブクラス化し、コンボボックスのウィンドウプロシージャで
WM_CTLCOLOREDIT, WM_CTLCOLORLISTBOX の処理をすればOK。
#行単位で、となるとdairygoodsさんが言われているようにオーナー描画でしょうけど
dairygoodsさん、petitさん、ありがとうございます。
今回は、行ごとに色分けする場合ではないので、サブクラス化の方法でやってみまし
た。(オーナ描画の知識不足もあるし)
以下のコードでやってみたのですが、どちらも、バックグランドの色は変わるものの、
ボタン(リストを垂らすための)、文字色、文字背景色に変化はなかったです。何故で
しょう...
ご教授お願いできないでしょうか。
case WM_CTLCOLORBTN:
brCombo_Btn = CreateSolidBrush(RGB(232,221,125));
return (LRESULT)brCombo_Btn;
case WM_CTLCOLOREDIT:
hdc = (HDC)wp;
brCombo_Edit = CreateSolidBrush(RGB(232,221,125));
if ((HWND)lp){
SetTextColor(hdc,RGB(45,119,0));
SetBkColor(hdc,RGB(232,221,125));
return (LRESULT)brCombo_Edit;
}
break;
case WM_CTLCOLORLISTBOX:
hdc = (HDC)wp;
brCombo_List = CreateSolidBrush(RGB(232,221,125));
if ((HWND)lp){
SetTextColor(hdc,RGB(45,119,0));
SetBkColor(hdc,RGB(232,221,125));
return (LRESULT)brCombo_List;
}
break;
by 果実酒
どうも文字色・文字背景色は変更できないみたいですね。
この場合もやっぱりオーナー描画しかなさそうです。
全体の背景色しか試してませんでした。m(__)m
ボタン部分の色変更の方法はわかりません。
通常のボタンコントロールならオーナー描画でいけますが、
コンボボックスのボタンはボタンコントロールではないようなので...
コンボボックスもどきを自作するしかないかも。
コンボボックスのボタンの下矢印って、フォントなんですよね。Marlett とかいう。
オーナードローのヒントになりますかね?
ちょうど良い機会なので、オーナ描画の勉強をしてみますぅ。
シャノンさん、ヒント提示ありがとうございます。???
>コンボボックスのボタンの下矢印って、フォントなんですよね。Marlett とかいう。
>オーナードローのヒントになりますかね?
ちょっと時間ができたので、しらべてみますぅ。
まだ、解決チェックは押さないぞ~。
by 果実酒