你是否正在寻找关于alphablend的内容?让我把最全的东西奉献给你:
本帖最后由 VisualEleven 于 2014-05-12 16:36:07 编辑
具体描述:
本人由于工作需要实现static控件透明,并可以设置文字颜色、字体,透明度设置等动态可以控件大小等问题。
以及图片加载到static控件也能实现上述操作,能够设置背景色再与背景
alphablend实现图片透明度的设置,背景任意改变,如下图:

基本功能已实现,我的思路是把父窗口的背景保存下来,在贴在图片控件上,用
alphablend实现透明,但是这样有缺陷,即当两个图片重合时,图片只能透明到父窗口,因为程序里保存的是父窗口的背景DC,效果不好,我想实现的是两个图片重合时上层图片能透明到下面的所有背景,即能透明到上一层图片还有背景,。
我也尝试过在重绘里动态的获取父窗口dcgetParent->getdc(现在采用的是改变背景时把父窗口DC保存下来),这样存在更多缺陷。
我这里有个别的公司做的软件,他们都实现了,但不知道怎么实现的,这个问题困扰我一周了,找不到解决的方式,望高手解答。
十万火急,非常感谢。下面是我重绘static控件实现透明的代码
GetClientRect(m_clientRect);
intnWindth=m_clientRect.Width();
intnHeight=m_clientRect.Height();
HDChDC=CreateCompatibleDC(hDestDC);//创建兼容DC,采用双缓冲画出
HDChMaskDC=CreateCompatibleDC(hDestDC);
HBITMAPhBitmap=CreateCompatibleBitmap(hDestDC,nWindth,nHeight);
HBITMAPhMaskBitmap=CreateCompatibleBitmap(hDestDC,nWindth,nHeight);
HBITMAPhOldBitmap=(HBITMAP)SelectObject(hDC,hBitmap);
HBITMAPhOldMaskBitmap=(HBITMAP)SelectObject(hMaskDC,hMaskBitmap);
SetBkMode(hDC,TRANSPARENT);
////////////////////////////////////////////////
CPointpt(0,0);
MapWindowPoints(m_pParentWnd,&pt,1);
if(g_pBackDC)//g_pBackDc是保存的父窗口DC
{
BitBlt(hDC,0,0,nWindth,nHeight,g_pBackDC->GetSafeHdc(),
pt.x,pt.y,SRCCOPY);
}
else
{
SelectObject(hDC,(HBRUSH)WHITE_BRUSH);
}
//////////////////////////////////////////////////////
if(!IsForImage())//static控件为加载图片
{
HBRUSHhbr=CreateSolidBrush(m_bkColor);
FillRect(hMaskDC,&m_clientRect,hbr);
DeleteObject(hbr);
}
else
{
DrawPathImageToDC(hMaskDC);//把图片加载到static
}
BLENDFUNCTIONblend;
memset(&blend,0,sizeof(blend));
blend.BlendOp=AC_SRC_OVER;
blend.SourceConstantAlpha=m_nAlpha;//透明度最大255
alphablend(hDC,0,0,nWindth,nHeight,hMaskDC,m_clientRect.left,
m_clientRect.top,m_clientRect.Width(),m_clientRect.Height(),blend);
///显示文本
if(!IsForImage())
ShowText(hDC,m_clientRect);
BitBlt(hDestDC,0,0,nWindth,nHeight,hDC,0,0,SRCCOPY);
//删除资源,释放内存-----------------------
SelectObject(hMaskDC,hOldMaskBitmap);
DeleteObject(hMaskBitmap);
DeleteDC(hMaskDC);
SelectObject(hDC,hOldBitmap);
DeleteObject(hBitmap);
DeleteDC(hDC);
下面是我想实现的效果(文字图片都能透明,而且重合的时候能透过下面的层)

分享到:
以上就是关于alphablend的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-5059-1.html
还有的多了