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


桜井  2008-09-25 18:10:55  No: 101123

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 19:50:08  No: 101124

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


桜井  2008-09-25 21:43:40  No: 101125

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

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

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

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


とおり  2008-09-26 11:38:43  No: 101126

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

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

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

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


K.J.K.  2008-09-27 00:58:49  No: 101127

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

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

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


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

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






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