Layered Window(分层窗体,透明窗体) updatelayeredwindow

效果1.窗体整体透明,支持子控件,支持OnPaint()

//为窗体添加WS_EX_LAYERED属性,该属性使窗体支持透明

ModifyStyleEx(0, WS_EX_LAYERED);
Layered Window(分层窗体,透明窗体) updatelayeredwindow

效果1.1 窗体整体透明,子控件也透明

//设置Alpha值为150

BYTE byteAlpha=150;

SetLayeredWindowAttributes(0,byteAlpha,LWA_ALPHA);

效果1.2 窗体整体透明,子控件不透明

//在OnCtlColor中将窗体背景刷为某种单色,比如RGB(255,0,0)

//在OnPaint中当然也可以

if(nCtlColor=IDD)

return m_brush; //m_brush.CreateSolidBrush(RGB(255,0,255));

//设置窗体中所有单色区域都透明

SetLayeredWindowAttributes(RGB(255,0,255),0,LWA_COLORKEY);

效果2.窗体部分透明,但该窗体不支持子控件,不支持OnPaint()

USES_CONVERSION;

Image* _pImage=

Image::FromFile(A2W("F:\Desktop\TestTransparentWnd\test.png"));

//透明度由PNG图片的Alpha通道决定

//如果加上WS_EX_TRANSPARENT属性,则鼠标会穿透此窗体

ModifyStyleEx(0, WS_EX_LAYERED/*|WS_EX_TRANSPARENT*/);

CDC *pDCDst=this->GetDC();

CDC dcSrc;

dcSrc.CreateCompatibleDC(pDCDst);

CBitmap bmp;

bmp.CreateCompatibleBitmap(pDCDst,300,300);

dcSrc.SelectObject(&bmp);

//用GDI+显示PNG图片

Graphics _Graphics(dcSrc.m_hDC);

_Graphics.DrawImage(_pImage,0,0,300,300);

BLENDFUNCTION _Blend;

_Blend.BlendOp=0;

_Blend.BlendFlags=0;

_Blend.AlphaFormat=1;

_Blend.SourceConstantAlpha=255;

//此时,鼠标会穿透窗体中Alpha值为0的区域

UpdateLayeredWindow(pDCDst,&CPoint(0,0),&CSize(300,300),

&dcSrc,&CPoint(0,0),

0,&_Blend,ULW_ALPHA);

bmp.DeleteObject();

dcSrc.DeleteDC();

_Graphics.ReleaseHDC(dcSrc.m_hDC);

this->ReleaseDC(pDCDst);

3.既要窗体部分透明(鼠标能穿透窗体中Alpha值为0的区域),还要能显示控件

解决方案:

创建两个窗体,窗体A使用效果2的方法,作为背景窗体;窗体B使用效果1.2的方法,作为前景窗体,控件都放在窗体B上。在窗体A的OnMove中,同步移动窗体B。

效果:



备注:

1.以上代码只需在窗体初始化的时候(如OnInitDialog)执行一次即可

2.WS_EX_LAYERED要求宏_WIN32_WINNT >= 0x0500

3.以上程序需要GDI+支持

参考资料:

http://msdn.microsoft.com/en-us/library/ms997507.aspx

http://www.codeproject.com/KB/dialog/PerfectTranlucentDlg.aspx

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/123679.html

更多阅读

怎样把QQ界面皮肤变成全透明 qq透明头像变成白色

怎样把QQ界面皮肤变成全透明——简介QQ透明皮肤很多人喜欢,可以DIY自己想要的皮肤,而且美观。以前还要下载插件才可以做到,不过腾讯为了满足用户的需要就自己设计了透明皮肤的功能。还不知道怎么设置的小伙伴快来围观哦怎样把QQ界面皮

新版qq怎么设置透明皮肤 最新版qq风尚透明头像

新版qq怎么设置透明皮肤——简介 最近流行透明皮肤、透明头像,睫毛也不甘落后,今天也为自己的qq设置了漂亮的透明皮肤,下面来看看睫毛的操作吧。新版qq怎么设置透明皮肤——方法/步骤新版qq怎么设置透明皮肤 1、找一张自己喜欢的图片

window xp中,怎样打开任务计划? window 计划任务

window xp中,怎样打开任务计划?——简介在我们使用电脑的时候,我们可以让电脑中的自带程序任务计划来管理电脑,我们该怎样打开任务计划呢?window xp中,怎样打开任务计划?——方法/步骤window xp中,怎样打开任务计划? 1、首先,我们要用鼠标的

教你如何设置QQ透明皮肤 qq皮肤透明

近期我看到很多人问QQ透明皮肤要怎么弄,怎么设置,我在网上找了很多文章,总结了下前人的精华,尽量简单明了,让大家尽量能看懂,希望对大家有所帮助。教你如何设置QQ透明皮肤——工具/原料QQ透明皮肤补丁(rdb格式文件)教你如何设置QQ透明皮

声明:《Layered Window(分层窗体,透明窗体) updatelayeredwindow》为网友自由者分享!如侵犯到您的合法权益请联系我们删除