Windows窗口背景透明的几种方法 | 您所在的位置:网站首页 › windows透明窗口实现方式 › Windows窗口背景透明的几种方法 |
Windows窗口背景透明的几种方法
原创
johnLuo 2009-06-11 16:17:26 ©著作权 文章标签 职场 休闲 文章分类 运维 ©著作权归作者所有:来自51CTO博客作者johnLuo的原创作品,请联系作者获取转载授权,否则将追究法律责任 做一个项目,需要用到窗口透明,把我学习到的几种方法罗列一下: 1,响应WM_CTLCOLOR消息,在消息函数内,如果需要获取窗口的Brush句柄,返回一个空句柄。 这个方法能够实现窗口的背景透明,但是不能设置alpha值,也就是说,没办法做到半透的效果。 2,调用SetWindowRgn函数,可以得到一个不规则形状窗口,把需要透明的窗口部分去掉。 这个方法说起来不算是真正的窗口透明,但是可以用来创建一个非规则的窗口应用程序。 3,重载窗口的OnCreate函数,设置扩展属性: int CWhiteBoardDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; DWORD exStyle = ::GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE); exStyle |= WS_EX_LAYERED; ::SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, exStyle); ::SetLayeredWindowAttributes(this->GetSafeHwnd(), RGB(0, 0, 0), 50, LWA_COLORKEY); // TODO: 在此添加您专用的创建代码 return 0;} SetLayeredWindowAttributes函数的最后一个参数,可以指明为Alpha透明。这样可以设置半透的效果。 第三个方法的问题是,整个窗口包括背景和前景都会有alpha效果,有时候只需要背景透明,而前景色保持不变,需要结合第1,3种方法才行。 赞 收藏 评论 分享 举报上一篇:算不上BUG 下一篇:让 InkCanvas 支持 Multitouch |
CopyRight 2018-2019 实验室设备网 版权所有 |