CreateWindowExを使用して作ったコントロールの背景色変更


桜井  2008-09-25 09:10:55  No: 101123  IP: 192.*.*.*

API CreateWindowEx を使用し IP入力テキストを表示しているのですが
IPテキストの背景色を変更できません。
API SetBkColor を使用したのですが、変わりませんでした。

そもそも、変更できるのでしょうか?

環境はVB6.0です。

以上、宜しくお願いします。

# Dim ctrl_hWnd as Long
# ctrl_hWnd = CreateWindowEx(WS_EX_CONTROLPARENT, WC_IPADDRESS, vbNullString, _
#               WS_CHILD Or WS_VISIBLE Or WS_OVERLAPPED Or WS_TABSTOP, _
#               0&, 0&, rct.Right, rct.Bottom, _
#               hWnd, 0&, App.hInstance, ByVal 0&)

# SetBkColor ctrl_hWnd, RGB(255, 0, 0)

編集 削除
River  2008-09-25 10:50:08  No: 101124  IP: 192.*.*.*

"SetBkColor"はデバイスコンテキストの背景色を取得する為のものなので、取得した後"SetBkMode"でバックグラウンドの塗りつぶしモード設定しなければ、背景色は変更できないのではないでしょうか?

編集 削除
桜井  2008-09-25 12:43:40  No: 101125  IP: 192.*.*.*

Riverさん ありがとうございます。

SetBkMode
を使用してみましたが、色は変わりませんでした。

SetBkModeの後に API:TextOut したのでが
背景色は変わるのですが、元々表示されていたテキストまで塗りつぶされてしまします。

なかなか難しいです。。。

編集 削除
とおり  2008-09-26 02:38:43  No: 101126  IP: 192.*.*.*

VCだと、WM_CTLCOLORでHBRUSHを返さないといけないようですが
VBだとどうなんでしょ

http://www5f.biglobe.ne.jp/~sayox/tec/mfc2.html
もしくはPaintイベントの時に文字を再描画

詳しいわけではないので逆質問されても分かることしか
回答できません。

VCで、OCXコントロール作成してしまっては?

編集 削除
K.J.K.  2008-09-26 15:58:49  No: 101127  IP: 192.*.*.*

WM_CTLCOLOR は今の Windows のコントロールでは使わないはず。
WM_CTLCOLORBTN など、それぞれのコントロールクラスに応じたものに
なっていますし、そこであるのは、Button,Edit,ScrollBar,ListBox,Static,DialogBox
だけだったはずです。

自分で ウィンドウクラスから作るのであれば、WNDCLASSEX.hbrBackground に
適切な色のブラシを設定するのが簡単な方法です。

しかし、今回は既存のクラスですので、それでは変更できません。
普通に考え付くのは、サブクラス化などして、WM_ERASEBKGND 時に独自の
ブラシで塗りつぶすこと、辺りでしょうか。

編集 削除