アプリ版:「スタンプのみでお礼する」機能のリリースについて

 hSWnd = CreateWindow("STATIC","あいう",WS_CHILD | WS_VISIBLE,
              0,0,320,240,hWnd,NULL,hInst,NULL);

に対して、

 case WM_CTLCOLORSTATIC:
     hBrush = CreateSolidBrush(RGB(0, 255, 0));
     return (LRESULT)hBrush;
 break;

とすると、hSWnd は緑になるけど、hSWnd の あいう の文字の
背景色が白です。
その白の部分を赤にするソースを教えてください。

A 回答 (2件)

WM_CTLCOLORSTATICのところで下記を追加すればいいはずです。



SetBkMode((HDC)wParam, TRANSPARENT);//背景を透過にする

この回答への補足

ありがとうございます。
できました。

hBrush = CreateSolidBrush(RGB(0, 255, 0));

 case WM_CTLCOLORSTATIC:
  hDC = GetDC(hSWnd);
  SetBkMode(hDC, TRANSPARENT);
  ReleaseDC(hSWnd, hDC);
  return (LRESULT)hBrush;
 break;

こなんのを試したこともあって、やってることは
SetBkMode((HDC)wParam, TRANSPARENT);
と同じだと思ったのに、
SetBkMode((HDC)wParam, TRANSPARENT);
じゃないとだめだったんですねー。
どうして
  hDC = GetDC(hSWnd);
  SetBkMode(hDC, TRANSPARENT);
  ReleaseDC(hSWnd, hDC);
はだめなんですか?

補足日時:2002/02/18 22:21
    • good
    • 0

#1のakinori_sです。



>どうして
>  hDC = GetDC(hSWnd);
>  SetBkMode(hDC, TRANSPARENT);
>  ReleaseDC(hSWnd, hDC);
>はだめなんですか?

GetDCで取得したデバイスコンテキストに対してSetBkModeを行っても
これが有効なのはこの時だけで属性が保持されるわけじゃないからです。
ですので描画処理が走った場合にWM_PAINT等で描画が行われると思いますが
この時に使用されるデバイスコンテキストに対して属性を設定した訳じゃないので
前の塗りつぶしモードで文字が上書きされてしまうんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

ReleaseDC(hSWnd, hDC);
までしか透過になっていなかったんですね。
ありがとうございました。

お礼日時:2002/02/20 06:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!