实现窗口透明(透明窗口和不规则窗口)的原理分析

7505 人浏览 | 时间: 2015-06-23 13:38:13 | 作者: codexia

    曾经为了用C++实现窗口透明,可谓是折腾了很久。用SDK也没有实现,书上都说使用空画刷即可实现背景透明,而我却始终没有实现。我也了解到很多朋友也为之烦恼。原因是,现在的Windows比书上讲的复杂了,实现机制也就复杂了,似乎以前的一些方法不再有效,或者书上的说法在很多地方都没有道出本质,即使我们照做了,或许因为缺少什么,始终没有满足,而作者对此,或许并不知道。不过我想,写书的时候,作者可能是可以实现了,不过,有些书可能真的过时了吧,现在的系统根本就不吃原来那一套了。然后使用MFC,你似乎会觉得更是雪上加霜了吧,MFC层层包被,你已经不知道Windows的很多底层的东西了。放心,既然你看到本文,你就不会再为之烦恼了。我不仅会讲述实现方法,更会道出实现技术的原理,以及平常我们实现时为什么一些不能实现的细节问题。相信你看了,为有所感悟,以后使用也会更加灵活,有了这个基础,再去进一步的探索,至少你不会云里雾里不知去向。
    因为我的经历,我对此感触颇深。曾经为了实现窗口透明,费尽心思,在网上查找资料无数,结果还是不了了之,最后还是求助于同事,同事给了一段代码,叫我放在初始化的函数里面,就能实现了。然后,就试了一下,OK了。那种惊喜,太强烈了。不过也就一瞬间的事情。因为只会贴代码,你就永远是码农,也就是最常见的农民工。所以,我冷静了下来。不过,看到代码,我似乎有点晕了。看上去很复杂的样子。因为那时候,我还是初学者,很多东西真的都没见过,所以,看上去好高级的样子,看不懂。不过,我看到了参数中的数字,我就去改变数字,然后就看看效果,慢慢的,我就看到了透明的效果的深浅。我就是喜欢探索,这种乐趣或许你懂或许你不懂。然而,让我失望的是,只有一个参数可以调节,其他的参数不知道如何调节,也就是说,只有一个调节有效果,其他的调节没效果。以后需要透明效果,就只是复制粘贴即可。虽然代码挺多,但是自己水平有限,也只有这样,想着也只能能水平提高了再来简化代码和弄清本质。
    对于窗口,我始终感觉很朦胧,总感觉看不清窗口的本质,这让我很不舒服。终于有一天,我下定决心看MSDN。英文的,你懂的。所幸我的英语水平不差,看下来也没什么问题,就是慢了点,而慢并不是英语的问题,而是其中的技术知识的问题。而庞大的MSDN,要想不迷路真不是容易的事,或许这是大多数中国程序员不愿意看MSDN的原因吧。不过我告诉你,看MSDN,你的收获绝对是看网上一些资料多得多,代价就是要静下心认真的看,还有要一定的基础。不过MSDN里面的技术都是完整而基础的,所以你既可以在里面获得大量的基础知识,又可以学习高深的知识。只要你认真,你就能搞定。不要觉得这些是废话,我只想告诉你,我对窗口透明技术的了解,之所以深入,就是看的MSDN,网上几乎查不到深入原理的资料。当然是有牛人的,只是没人愿意花时间来告诉你罢了。有MSDN,就是最好的资料,一定要利用起来。不过,你很幸运,我不仅会告诉你如何去获取这些知识,而且还会将这些基础而重要的东西传授于你,让你有更强的基础去深入。如果你问我为什么会无偿的将自己的技术分享还这么认真用心,我只想告诉你,我热爱技术,我鄙视技术私藏,我想让更多的人去学习技术,让更多的人深入技术。我的学习全部来源于网络的无私分享,我也会将我的技术分享给大家,饮水思源。如果你有什么好的技术,不用将你的全部分享,只要把技术基础和思想分享出来,就够了。当然,如果你愿意,可以全部分享。很多人会觉得,分享技术会让自己的优势降低,我想,你就错了。你分享的技术越多,你的收获就越多。事实会证明我这一点。好了,我的这个学习经历就是这样,我想多数人也是这么想的。下面我们进入正题。
    Windows窗口机制,肯定不是从前的那样的了,很多书已经过时,如果你要在新平台实现一些技术,请查阅MSDN。我们先来看看我最初得到的实现窗口的一段代码,然后来分析这段代码。你可以将这一段代码放到你程序实现透明。不过我建议你不要这么做,请你阅读完本文,使用后面更为简洁的代码去实现。学习了原理,你会使用的更为灵活,不过这里只是粗略的讨论,更加深入的,有待你进一步学习研究,这里给你提供一个入口。

请微信扫码阅读。
为防止恶意爬虫,
已开启反爬机制,
理解哟~~~~
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0

相关阅读