b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

请教高手 ,关于MFC AlphaBlend透明的问题,十万火

电脑杂谈  发布时间:2016-05-16 01:01:48  来源:网络整理

你是否正在寻找关于alphablend的内容?让我把最全的东西奉献给你:

本帖最后由 VisualEleven 于 2014-05-12 16:36:07 编辑

具体描述:
本人由于工作需要实现static控件透明,并可以设置文字颜色、字体,透明度设置等动态可以控件大小等问题。
以及图片加载到static控件也能实现上述操作,能够设置背景色再与背景alphablend实现图片透明度的设置,背景任意改变,如下图:

请教高手 ,关于MFC 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);

下面是我想实现的效果(文字图片都能透明,而且重合的时候能透过下面的层)

请教高手 ,关于MFC AlphaBlend透明的问题,十万火


分享到:

以上就是关于alphablend的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-5059-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 张涵
        张涵

        还有的多了

      • 王靖飞
        王靖飞

        话说有钱的马云和捡垃圾的马云都同样说了一句话“天下没有人靠炒股发财”

      • 王振东
        王振东

        突然想到陌上人如玉公子世无双TAo的火热足以让冰雪融化

      热点图片
      拼命载入中...