スタティックコントロールの半透明化 – プログラミング – Home

スタティックコントロールの半透明化
 
通知
すべてクリア

[解決済] スタティックコントロールの半透明化


コナスペック
 コナスペック
(@コナスペック)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

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

環境
VC6(MFC)


引用未解決
トピックタグ
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

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)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

PGに訂正。

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


返信引用
コナスペック
 コナスペック
(@コナスペック)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

玲音 (st.lain)さんありがとうございます。
早速試してみます。


返信引用
コナスペック
 コナスペック
(@コナスペック)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

玲音 (st.lain)さん変事おそくなってごめんなさい。
なんとか解決できました、ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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