CreateWindowで作成したSTATICの色変更 – プログラミング – Home

CreateWindowで作成したST...
 
通知
すべてクリア

[解決済] CreateWindowで作成したSTATICの色変更


もこ
 もこ
(@もこ)
ゲスト
結合: 12年前
投稿: 4
Topic starter  

WindowsXP、VC2005にてプログラムを作成しております。

CreateWindowでSTATICのWindowを作成したのですが、
ウィンドウの色(背景?)とテキストの色の変更が出来ません。

同じCreateWindowで作成したプッシュボタン(BUTTON)につきましては、
SetSysColorsを使い、COLOR_BTNTEXTとCOLOR_BTNFACEでそれぞれボタンの背景と文字の
色を変更出来ました。

SetSysColors以外でも、CreateWindowした際に戻り値で受け取れるウィンドウハンドルを
使ってHDCを取得し、SetTextColorをしてみたのですが、反映されません。

<コード>

HWND hWnd = CreateWindow(_T(STATIC), _T(test),
WS_CHILD | WS_VISIBLE | SS_LEFT,
0,0,100,100,
hWnd,
(HMENU)1,
g_hInst,NULL);

HDC hDC = GetDC(hWnd);
SetWindowText(hDC, RGB(255,0,0));

と、いう感じです。

SetSysColorでは、
COLOR_DESKTOP
COLOR_CAPTIONTEXT
COLOR_WINDOWTEXT
COLOR_WINDOW
COLOR_HIGHLIGHTTEXT
を試してみましたが、背景、文字色ともに変わりない状態でした。

上記以外に方法をご存じないでしょうか?
また、上記で修正箇所がございましたら教えていただけないでしょうか?

よろしくお願いいたします。


引用未解決
トピックタグ
もこ
 もこ
(@もこ)
ゲスト
結合: 12年前
投稿: 4
Topic starter  

追加です。

記述ミスがありました。
×SetWindowText(hDC, RGB(255,0,0));
○SetTextColor(hDC, RGB(255,0,0));

です。
また、上記以外の方法として、
CreateWindowで取得したウィンドウハンドルを使って
SelectObjectでフォントを指定してみたのですが、それも反映されませんでした。


返信引用
もこ
 もこ
(@もこ)
ゲスト
結合: 12年前
投稿: 4
Topic starter  

追加です。

CreateWindowで作成する際に、EDITで作成し、ユーザーに触られたくはないので、
ReadOnlyとなるようにウィンドウスタイルに「ES_READONLY 」を指定してみたのですが、
自動でグレーアウトしてしまうようで、実現できませんでした。

ご回答がいただけてない状況ですが、どなたかが辿りついた時のために記載しておきます。

連投失礼いたしました。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

「staticコントロール 背景色」とかで検索したら出てきませんかね?

http://www.nitoyon.com/vc/reference/gui/static.htm#content_1_9
こちらのページはダイアログの場合ですが。
まぁ、やることは一緒です。

>CreateWindowで取得したウィンドウハンドルを使って
>SelectObjectでフォントを指定してみたのですが、それも反映されませんでした。

そのフォントの寿命は大丈夫ですか?

>ReadOnlyとなるようにウィンドウスタイルに「ES_READONLY 」を指定してみたのですが、
>自動でグレーアウトしてしまうようで、実現できませんでした。

EDITコントロールは…
ReadOnly付けないとWM_CTLCOLOREDITで、ReadOnly付けるとWM_CTLCOLORSTATICで……だった
と記憶してますが……。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

とりあえず…
WndProcに下記追加で背景色は変更されてます。
# まぁ、このコードだとプログラム実行中にデスクトップの色を変更した場合に追従でき
ませんが…まぁ本題ではないですかね。
# あと、hBrushの開放端折ってます。

static HWND hStatic;
static HBRUSH hBrush = NULL;

 case WM_CREATE:
  hStatic = CreateWindow(_T(STATIC), _T(test), WS_CHILD | WS_VISIBLE |
SS_LEFT, 0,0,100,100, hWnd, (HMENU)1, hInst, NULL);
  break;

 case WM_CTLCOLORSTATIC:
  if((HWND)lParam == hStatic) {
   if(hBrush == NULL) {
    hBrush = CreateSolidBrush(GetSysColor(COLOR_DESKTOP));
   }
   return (LRESULT)hBrush;
  }
  break;


返信引用
もこ
 もこ
(@もこ)
ゲスト
結合: 12年前
投稿: 4
Topic starter  

ご回答いただきありがとうございました。

返信遅くなり失礼いたしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました