窗口透明化 AlphaBlend

在網上搜了下AlphaBlend的說明,也看了MSDN,但還是不太明白,自己就動手試了下,結果OK。


先貼下代碼

BLENDFUNCTION   bf;   
bf.AlphaFormat=0;   
bf.BlendFlags=0;   
bf.BlendOp=AC_SRC_OVER;   
bf.SourceConstantAlpha=128;//透明度50%(0 - 255)

CDC* parentDc = GetParent()->GetDC();
CDC* dc = GetDC();
CRect rt;
GetClientRect(&rt);

CRect rtWnd;
GetWindowRect(&rtWnd);
GetParent()->ScreenToClient(&rtWnd);
AlphaBlend(dc->GetSafeHdc(),0,0, rt.Width(), rt.Height(), parentDc->GetSafeHdc(), rtWnd.left, rtWnd.top, rt.Width(), rt.Height(), bf);
ReleaseDC(parentDc);
ReleaseDC(dc);


這段代碼的背景如下:一個對話框,點擊一個按鈕,接着執行上面的代碼;

所謂透明,其實就是把自己擋住的部分顯示在自己的界面,其實有個像素的處理,API函數AlphaBlend就是做了這個處理;

因爲這只是測試,所以如果你要實現自動透明化,那應該在OnPaint中做相應的處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章