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)
"SetBkColor"はデバイスコンテキストの背景色を取得する為のものなので、取得した後"SetBkMode"でバックグラウンドの塗りつぶしモード設定しなければ、背景色は変更できないのではないでしょうか?
編集 削除Riverさん ありがとうございます。
SetBkMode
を使用してみましたが、色は変わりませんでした。
SetBkModeの後に API:TextOut したのでが
背景色は変わるのですが、元々表示されていたテキストまで塗りつぶされてしまします。
なかなか難しいです。。。
VCだと、WM_CTLCOLORでHBRUSHを返さないといけないようですが
VBだとどうなんでしょ
http://www5f.biglobe.ne.jp/~sayox/tec/mfc2.html
もしくはPaintイベントの時に文字を再描画
詳しいわけではないので逆質問されても分かることしか
回答できません。
VCで、OCXコントロール作成してしまっては?
WM_CTLCOLOR は今の Windows のコントロールでは使わないはず。
WM_CTLCOLORBTN など、それぞれのコントロールクラスに応じたものに
なっていますし、そこであるのは、Button,Edit,ScrollBar,ListBox,Static,DialogBox
だけだったはずです。
自分で ウィンドウクラスから作るのであれば、WNDCLASSEX.hbrBackground に
適切な色のブラシを設定するのが簡単な方法です。
しかし、今回は既存のクラスですので、それでは変更できません。
普通に考え付くのは、サブクラス化などして、WM_ERASEBKGND 時に独自の
ブラシで塗りつぶすこと、辺りでしょうか。