スタティックコントロールの半透明化

[戻る]
コナスペック 2007/10/18(木) 18:06:12
現在、ウィンドウに貼り付けたスタティックコントロールを半透明化しようと
試みているのですがどうしてもできません。できるのかも不明なんですが。。。
半透明にしたスタティックコントロールに色付け(青)してガラスのように見せたい
んです。ダイアログやウィンドウ全体はSetLayeredWindowAttributesで出来る事は
知っているのですがコントロール一部だけやるにはどうしたらいいでしょうか?
どなたか教えて下さい、お願いします。

環境
VC6(MFC)

玲音 (st.lain) 2007/10/19(金) 08:35:43
SetLayeredWindowAttributesは使ったことがないので、何とも言えませんが。
以下が、参考になるかならないかわかりません。

> スタティックコントロールに色付け(青)して
ちょっと思い当たる節があったので。

>> CEdit & CStatic Transparency Control
> http://www.codeproject.com/editctrl/ctrltrans.asp

ここの親背景を描画させるUpdateCtrl関数のInvalidateRect()以降に、

----- BEGIN -----

pParent->UpdateWindow();

CRect rc;
GetClientRect(&rc);

CClientDC     dc(this);

CDC memdc;
memdc.CreateCompatibleDC(&dc);

CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());

memdc.SelectObject(&bmp);
for (int i = 0 ; i < 256 ; i++)
 { memdc.FillSolidRect(::MulDiv(rc.Width(), i, 255), 0, ::MulDiv(rc.Width(), 
(i + 1), 255), rc.Height(), RGB(255 - i, 0, i)); }

BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = AC_SRC_ALPHA;
bf.SourceConstantAlpha = 0x80;

::AlphaBlend(dc.GetSafeHdc(), 0, 0, rc.Width(), rc.Height(), memdc.GetSafeHdc
(), 0, 0, rc.Width(), rc.Height(), bf);

----- END -----

こんなのを追加してみるとか。(初期状態での描画な状態はさておき)UpdateCtrl関数が
呼ばれて以降は、親の描画を受けた上で赤→青のグラデーションがアルファとして
描画されるかと思います。

GradientFill()あたりを使うとがんばればそれっぽく見えるのカナ、と思ったり。

玲音 (st.lain) 2007/10/19(金) 08:41:22
PGに訂正。

> ::MulDiv(rc.Width(), i, 255)
> ::MulDiv(rc.Width(), (i + 1), 255)
255ではなくて、256の間違いです。

コナスペック 2007/10/19(金) 09:31:05
玲音 (st.lain)さんありがとうございます。
早速試してみます。

コナスペック 2007/10/19(金) 14:45:55
[[解決]]
玲音 (st.lain)さん変事おそくなってごめんなさい。
なんとか解決できました、ありがとうございます。

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