エディットボックスの文字色変更

[戻る]
DIO 2007/01/24(水) 20:08:58
VS2005 winXP SDK

いつもお世話になります。
早速ですが質問です。

下のようにテキストボックスの文字に色としましたが、
黒い文字で出力されてしまいます。

Create・・・系はすべて成功しハンドルも取得できています。

問題点の指摘等、よろしくお願いいたします。

    //テキストの設定
    hDC = GetDC(GetDlgItem(hWnd, IDE_TEXT));
    if(hDC != NULL)
    {//テキストのデバイスコンテキストが取得できたとき
        //ブラシの作成
        hBrush = CreateSolidBrush(RGB(0,255,0));
        //ブラシオブジェクトの変更
        hOldBrush = (HBRUSH)SelectObject(hDC ,hBrush);
        //テキストの出力
        SetWindowText(GetDlgItem(hWnd, IDE_TEXT), "aA 12 あぃ");
        //変更したオブジェクトを元に戻す
        SelectObject(hDC ,hOldBrush);
        //作成したオブジェクトの破棄
        DeleteObject(hBrush);
        //デバイスコンテキストの開放
        ReleaseDC(hWnd ,hDC);
    }

超初心者 2007/01/24(水) 20:23:03
他のウィンドウのDCを操作しても描画に使われないから駄目。
WM_CTRLCOLORについて調べてごらん。

DIO 2007/01/25(木) 19:31:04
>超初心者さん

ありがとうございます。

WM_CTLCOLORについて以下のように理解しましたが
どうでしょうか?

1.
WM_CTLCOLORはエディットボックスが
描写される直前に呼ばれ、引数に描写されるエディット
ボックスのウインドウハンドルが渡される。
このハンドルのDCにSet...で設定してやることで
描写の設定が変更できる。

2.
>他のウィンドウのDCを操作しても描画に使われないから駄目
これは、GetDC(GetDlgItem(hWnd, IDE_TEXT)でえられる
ハンドルが上で渡されるハンドルと違うという意味


おかげさまで、文字色の変更をすることが出来ました。
ありがとうございます。


ところで、
2.はなぜ違うのでしょうか?
コントロ−ルもウインドウで、すよね?
EDITボックスの入力するところは
クライアント領域と違うといったようなことでしょうか?

また、
sendmessageのWM_SETFONTで設定していたフォントが反映されず、
エディットボックスの領域からわずかにはみ出すようになってしまいました。

この方法の場合、どのタイミングでフォントの設定をすることが適当でしょうか?


指摘点灯ありましたら、
よろしくお願いします。

超初心者 2007/01/25(木) 22:31:15
読みにくいでしょうけど面倒なので引用は省きます。

wParamにDCがあるでしょ
http://msdn2.microsoft.com/en-us/library/ms806328.aspx

GetDCを実行して得たDCに前回の設定なんて無いよ。
毎回設定しなおし。

テキストボックスの処理がDCに色とかを改めて毎回設定しているから。
画面のプロパティでエディットコントロールなどが使う色を黒以外に変えられるよ。

実はフォント作成に失敗しているとか。
実は作成したがフォントを消去しているとか。

PATIO 2007/01/26(金) 11:51:39
ふと思ったんですが、DIOさんは最初の提示したコードを何処に記述してました?
描画のソースはどの関数内で記述されていたの?と言う意味です。
コントロールの自身が行っている描画があると思いますが、
そちらの描画はそのままになっているのではないでしょうか?
外部で書き換えてもコントロール自身が描画を起こっているわけですから
そちらが上描いてしまっていると言う事はないでしょうか。

DIO 2007/01/28(日) 17:23:41
[[解決]]
>超初心者さん

恥ずかしながらDCはコントロールに1つあって
変更を保持するものだと思ってました(泣)

フォントの作成は出来ていたのですが、
色とフォントの設定を別のところでやっていたため、
フォントの設定は何も描写しないうちに破棄されていたみたいです。

色と同じところCTLCOLOR内に移すことで
解決できました。

>PATIOさん

まさにおっしゃるとおりです。
PATIOさんの指摘のおかげで多くの勘違いに気づけました。
ありがとうございます。

実は教えてもらったメッセージを知らなかったため、
initやactive時にFillrectすることで
エディットコントロールの背景等を変えていました。


おかげさまでDCの理解が少し進みました。
ありがとうございました。

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