現在、ウィンドウに貼り付けたスタティックコントロールを半透明化しようと
試みているのですがどうしてもできません。できるのかも不明なんですが。。。
半透明にしたスタティックコントロールに色付け(青)してガラスのように見せたい
んです。ダイアログやウィンドウ全体はSetLayeredWindowAttributesで出来る事は
知っているのですがコントロール一部だけやるにはどうしたらいいでしょうか?
どなたか教えて下さい、お願いします。
環境
VC6(MFC)
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()あたりを使うとがんばればそれっぽく見えるのカナ、と思ったり。
PGに訂正。
> ::MulDiv(rc.Width(), i, 255)
> ::MulDiv(rc.Width(), (i + 1), 255)
255ではなくて、256の間違いです。
玲音 (st.lain)さんありがとうございます。
早速試してみます。
玲音 (st.lain)さん変事おそくなってごめんなさい。
なんとか解決できました、ありがとうございます。