介绍:

Layered Windows是windows窗口中的一类,提供类似半透明的效果(阿尔法混合)。半透明效果是字面上有能看出来的,但实际上根据MSND,该类型的窗口还能更好的支持非矩形的窗口,使之显示效果更平滑流畅(暗地里猜测是使用了硬件加速而达到的效果)。在win8之前WS_EX_LAYERED只能用于顶层窗口,win8及之后版本子窗口也可以使用。

使用:

首先要做的就是在CreateWindowEx()时加入 WS_EX_LAYERED风格。之后调用SetLayeredWindowAttributes()。该函数原型如下:

  

BOOL WINAPI SetLayeredWindowAttributes(_In_ HWND     hwnd,      //窗口句柄_In_ COLORREF crKey,      //设置色彩通道的相对分量 使用RGB宏_In_ BYTE     bAlpha,     //阿尔法值,0-225之间_In_ DWORD    dwFlags     //LWA_ALPHA或LWA_COLORKEY,或二者都有
);/**LWA_ALPHA :使用阿尔法值显示透明效果LWA_COLORKEY:使用RGB通道过滤颜色*/

那么两种Flag有什么区别呢,或者说它们分别是什么效果呢?不多说上图就明白了。

LWA_COLORKEY有效时参数指定的    LWA_ALPHA 有效时对窗口整体使用半

颜色被视为透明                 透明效果,阿尔法值由参数指定。 

                 

左侧是LWA_COLORKEY,可以看到在窗口    右侧是 LWA_ALPHA可以看到整体呈现半透明,而且

上画的RGB=(255,0,255)的圆形被视    在窗口上绘制的圆形也是半透明的。(也注意到对圆型

为透明                     窗口其坐标还是按矩形的左上角算的) 

两种效果可以同时使用效果,其效果就是一个半透明的黑色月亮。

可以使用UpdataLayeredWindow()函数更新Layered Window。比如重新设置其透明度,位置,大小,形状等。该函数会更新整个窗口。不需要担心被遮挡的窗口的更新问题,系统会处理好的。(对一个Layered窗口系统总是保存其下面的图像,并自动更新,这意味着占用更多内存,所以不需要时通过SetWindowLong()删除WS_LAYERED风格。这在下面还会说)

对透明的部分(比如上面左图月牙缺掉的部分或者对右图设置阿尔法值为0)点击鼠标时,鼠标消息会透过窗口,也就是Layered窗口在此处不接受鼠标消息。这很符合所看即所得的设计理念,用户感觉看不到的地方就是没有,他们不必理解什么阿尔法混合。

如何设置Layered窗口为普通的窗口

如果不再需要透明效果,尽早去掉Layered属性可以提高性能,标准的做法如下:

// Remove WS_EX_LAYERED from this window styles
SetWindowLong(hwnd, GWL_EXSTYLE,GetWindowLong(hwnd, GWL_EXSTYLE) & ~WS_EX_LAYERED);// Ask the window and its children to repaint
RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);

最后说一点,如果窗口已经创建好了也有其他的办法,调用SetWindowLong(),重新设置窗口风格即可。但是对一个已经显示在屏幕上的窗口修改其风格为 WS_EX_LAYERED时会发现该窗口不见了,此时调用UpdataLayeredWindow()或SetLayeredWindowAttributes()后会出现你想要的样子。

另外:一旦 SetLayeredWindowAttributes 被调用了, 之后对 UpdateLayeredWindow 的调用都会失败直到重新改变了窗口的Layered属性。

转载于:https://www.cnblogs.com/painterQ/p/6706547.html

Layered Windows窗口的半透明效果相关推荐

  1. 半透明: MFC实现父窗口不透明,子窗口半透明效果

    [cpp] view plaincopy OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //绘制子窗口的背景,用主窗口的背景填充,实现透 ...

  2. MFC实现父窗口不透明,子窗口半透明效果

    参考 https://blog.csdn.net/u011430225/article/details/48470373 描述: 根据MSDN所述,子窗口的半透属性是跟随父窗口的.也就是说在子窗口中用 ...

  3. DOM 案例——(美团外卖下拉框菜单、半透明——信息滑入、模态窗口拖拽效果、放大镜效果、滚动条滑到一定位置的固定导航栏、12306购票网站多级联动、斗鱼TV无规则弹幕特效、百度搜索条动态输入下拉瀑布)

    目录 1.缓动动画--美团外卖下拉框菜单 2.半透明--信息滑入 3.模态窗口拖拽效果 4.放大镜效果 5.滚动条滑到一定位置的固定导航栏 6.12306购票网站多级联动 7.斗鱼TV无规则弹幕特效 ...

  4. Windows窗口、控件和对话框

    from:http://www.zbitedu.com/?action-viewthread-tid-24616 Windows窗口.控件和对话框 windows应用程序是通过窗口(window).控 ...

  5. Windows 窗口透明知识点

    1.透明窗口要求: 窗口不能是Child类型 要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性,方法可以在CreateWindowEx时指定,也可以SetWindowLong动态设置 ...

  6. Windows窗口刷新机制详解

    1.Windows的窗口刷新管理 窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前窗口从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序 ...

  7. c++mfc编写实验_零基础学Windows窗口图形界面编程(不用MFC),菜鸟学完变身高手,敢与专业媲美...

    又一门新的计算机课上线啦! 什么课?看下面视频(以下视频是本课第一讲) 用什么语言 我们声明一下(这个在我们课上也跟同学强调):不要为用什么语言掐架!那是初学者的行为,为高手所不为. 第二,我们这门课 ...

  8. html5窗口播放插件,基于jQuery UI的模拟windows窗口插件

    jquery-lwd是一款轻量级的基于jQueryUI的模拟windows窗口插件.该插件可以模拟windows窗口,对窗口进行最大化,最小化,拖动等操作.并提供windows2000经典主题效果.它 ...

  9. Visual C++游戏编程基础之透明半透明效果

    一.基本思路 1.半透明的原理 一张位图由许多像素组成,而每一像素包含R.G.B三原色,三原色的值决定了像素的色彩,要实现半透明效果,需要把前景图    和背景图彼此对应的像素颜色按某一比例进行调配, ...

最新文章

  1. Python面试必备—分布式爬虫scrapy+redis解析
  2. Canal全方位深入讲解,看这一篇就够了
  3. Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)
  4. MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)...
  5. 卡牌特效: svg不规则倒计时动效
  6. 贝叶斯线性回归方法的解释和优点
  7. python 程序停止打印日志_Python日志打印
  8. mscoco数据集_caffe详解之数据层
  9. C语言中的多字节字符与宽字符
  10. HoloLens 2开发:HoloLens开发VS安装与配置
  11. 比较x^y和y^x的大小
  12. VS2019添加自定义发布本地的Nuget(.nupkg文件)
  13. <2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结
  14. 老照片免费修复软件有哪些?一键智能修复老照片工具推荐给你
  15. 基于SSM的图书馆管理系统
  16. UE5 Live Coding编译出错时乱码问题解决方法
  17. PL2303在ARM Linux下驱动的问题及解决方法
  18. jitter单位_抖动(jitter)测量
  19. 从一个Uiautomator的官方demo说源码
  20. SpringBoot练手项目总结

热门文章

  1. 【从入门到出图】全网最详细、最全+数据分享无套路
  2. 精灵宝可梦剑盾服务器维护,《精灵宝可梦 剑盾》又出新操作,玩家:这是准备毁IP?...
  3. 算法寒假实习面试经过之 十一贝(offer) 联想研究院(电话一面 被拒)
  4. c++制作超级简易计算器
  5. java毕业设计选题推荐 SpringBoot大学生健康档案系统 大学生健康服务平台 高校学生体质检测系统
  6. coot怎么调用python_pymol使用笔记讲解.doc
  7. HBuilder X运行微信小程序项目至微信开发者工具失败
  8. python爬虫(多线程锁信号量)
  9. 如何在html中加入项目列表,css如何添加列表项目符号
  10. 非线性振动 matlab,基于MATLAB的车削细长轴过程非线性振动分析.pdf