画像の背景にしたい

[戻る]
めがね 2009/04/22(水) 11:25:06
お世話になります。
再度質問させてください。

ダイアログ全体の背景をGDI+を使って画像を
描画しています。
描画は正常に行われているのですが、ダイアログに貼り付けた
スタティックテキストの背景が描画画像にするのはどうしたらよいのでしょうか?

OnCtlColorでTRANSPARENTをしてみましたが、元のダイアログ色(灰色)が背景に
なってしまいます。

ちなみに、背景はOnPaint()内で描画しています。

ご教授願います。

環境
VC6.0 MFC ダイアログベース

aetos 2009/04/22(水) 11:26:35
OnEraseBkGnd で背景を描いてみるとか。…ダメかな?

bun 2009/04/22(水) 11:29:00
ちょっと、試している暇がないので、丸投げですが、
背景をOnEraseBkgnd()で描画するとどうなりますか?

bun 2009/04/22(水) 11:29:49
aetosさん、失礼
かぶりました。

めがね 2009/04/22(水) 12:14:03
ありがとうございます。

OnPaint()ではなくOnEraseBkgnd()で背景を描画するようにしましたが
変わらずテキストの背景は灰色のままでした。

OnCtlColorでTRANSPARENT実行時に
背景として認識されていないのが原因だとは思うんですが...

もう少し調べてみます。

なにかアドバイスがありましたら、お願いします。

rin 2009/04/22(水) 12:35:42
楽な方法
スタティックテキストに文字を設定するのではなく
ダイアログに対し、SetBkModeで文字背景をけし
直接DrawTextなどで文字を書く

#文字を書く位置にスタティックテキストを使いまわすとリソースエディタで
位置を決められるので楽


ところでOnCtlColorの戻り値のブラシはどうなっていますか?

めがね 2009/04/22(水) 12:43:42
rinさん、ありがとうございます。

>楽な方法
最終手段として使わせて頂きます。

>ところでOnCtlColorの戻り値のブラシはどうなっていますか?
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 COLORREF colorRef = RGB(0,0,0);

 switch(nCtlColor)
 {
  case CTLCOLOR_STATIC:
   pDC->SetBkMode(TRANSPARENT);
   pDC->SetTextColor(colorRef);
  default:
   break;
 }
}

としていますので、ブラシは特に設定していません。
これが原因でしょうか?

aetos 2009/04/22(水) 12:47:10
OnCtlColor で SetBkMode( TRANSPARENT ) してから、戻り値として GetStockObject( 
NULL_BRUSH ) を返すといいかもしれない。

めがね 2009/04/22(水) 12:56:38
おお!できました。

なるほど、空のブラシを返すことによって、背景を指定しない
ので、スタティックテキストの下の画像が背景として認識される
ということですね。(合ってますか?)

解決とさせて頂きます。

返事をくださった皆様、ありがとうございました。
また何かあった時には宜しくお願いいたします。

aetos 2009/04/22(水) 13:09:45
解決チェックを付けてくださいな。

めがね 2009/04/22(水) 13:15:53
[[解決]]
すいません、忘れてました!

古いスレッドには追加発言できません。