实现半透明窗口

在windows7的系统中,窗口的标题栏和边框的,任务栏等等地方的半透明效果所吸引,那么如果我们作为软件开发的学习者,如果我们自己要开发一个可以半透明的窗口界面,应当如何呢,下面我就为大家讲解一下。我这里呢,要讲两个方法。

第一个方法,就是是使用LAYERED窗口,这个样式的窗口不经能为我们带来帮透明的窗口效果,而且呢,这中窗口样式,还可以帮助我们建立不规则的窗口,平时我们建立的窗口都是方形的,但是使用这种窗口样式呢,我们就可以建立各种复杂的窗口出来,而且只有在有像素的地方才可以接收鼠标消息,没有像素的地方就穿透了,由这个窗口下面的窗口接收到鼠标消息。ok,说的有点远了,言归正传,接着说LAYERED窗口,我们要建立这样的窗口呢,就得用CreateWindowEx函数创建窗口,因为这个函数我们可以指定扩展样式,用了这个函数之后,我们在扩展样式中,指明WS_EX_LAYERED,就可以创建layered窗口,但是在windows7及以前的系统呢,这个样式不能用于子窗口,只能用于主窗口。使用了这个样式之后,那么你就要绘制界面了,这个界面的上的所有元素,都要你自己绘制,具体的绘制过程这里不讨论,这个问题,我在以后的文章中会详细说明。在msdn上也有说明这种窗口样式的特征,不过没有具体的代码和示例程序,一不小心,就不成功。

第二个方法就是使用桌面窗口管理器,也可以达到半透明的效果,而且呢,还有个特定,那就是背景模糊,透过这个窗口看窗口后面的内容,有镜面效果。同时你再使用桌面管理器中的将标准框架(边框)扩展到客户区,配合背景模糊效果的使用呢,就可以达到背景和边框融合为一体,效果很不错,另外,你在设置颜色的时候,要注意,否则,就会和背面的颜色混合,造成我们窗口的内容不清楚。最好颜色不要太深。或是设置为没有颜色,直接透明,模糊,因为这样不会影响到我们窗口上文字的阅读效果。注意的是,这个只能用于vista及以后的系统,而且系统必须开启了aero效果,如果是家庭版是没有这个效果的,那么也达不到效果。下面给出效果图:


上面这幅图中呢,中间的播放器界面的窗口界面呢,使用的是layered窗口,由于我不是搞美术出生,所以界面画的很丑,呵呵,由于使用layered窗口,就不能在这个窗口上建立我们的按钮,编辑框等等我们平常使用的控件,我这里的如pause(暂停)等按钮,其实是逻辑窗口,也叫Wondowless,为了我能使用listview控件显示歌单,我就由建立了一个线程,在这个线程中我创建了一个对话框,当中添加listview控件,然后呢,就在这个窗口中,我使用桌面管理器(DWM)实现了窗口的透明化,镜面模糊,边框和客户区一体的效果,最后还有一个小窗口,里面的滑块是用来调节主窗口,也就是播放窗口的透明度的。

文章前面我说了有关使用DWM时的颜色问题,这里我用了颜色,但是这样,不好,主要表现在会和这个窗口下面的背景产生混合,影响文字的阅读性,这里我用的浅,影响不明显。我建议将颜色值设为RGB(0,0,0,)这样就可以得到以下的效果


这样就很好,完全融合起来了。


发布了46 篇原创文章 · 获赞 5 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章