挖井

类库大魔王的挖井日记

挖一口属于自己的井


日历软件的界面实现

今天看了一下两个日历软件的界面实现,一个是老外的ADC,还有个是国产的鱼鱼桌面日历秀,它们都有一个特点是,能把日历显示在桌面最底层,就算你用鼠标在上面点,划,都是相当于直接点在桌面上,但是视觉效果上,它们又是确实存在的。

大概看了一下,ADC的实现比较简单,就是把Wallpaper截下来,然后把自己的日历内容,Todo list 都画到上面去,生成一个新的bmp 文件,然后,“啪”一下,在后面偷偷把Wallpaper 换成那张bmp。如果本来没有Wallpaper的,就直接把底层颜色截下来再画,就是这样。另外再添加个鼠标钩子,估计用线程钩子就够用了,钩住Explorer.exe 上的双击事件,判断一下鼠标的坐标,在那个日历的区域内,就做出相应的反应,比如弹出个对话框之类的。另外有一点,是要截获桌面主题修改的事件(或消息),免得那张bmp 的内容没有跟着换,用户就不干了。还有就是,在桌面边缘它会添加一个任务栏,是看起来半透明的样子,粗略地观察了一下,是这样处理的:某点像素值有RGB三部分,每部分分别加上一个值成为一个新的值,至于加多少,如果是00,则加0x4D,如果是80,则加0x26,如果是FF,则不加,估计是这样的均匀分布,最后造成一种半透明的视觉效果。总之,给人有点骗人的感觉,但是,它实现方法比较简单,普通用户谁去管它是怎么做的,看起来做到这个外观样子了就行了。

鱼鱼的我就比较晕了,只是才翻了MSDN 发现的,设置几个窗口的扩展属性可以实现鼠标穿透,加上WS_EX_LAYERED 和 WS_EX_TRANSPARENT 就可以,再调用一下SetLayeredWindowAttributes 设置一下透明度,就可以了,把窗口设成一开始就不激活,把任务栏上的按钮隐藏,就基本达到要求了。它的半透明效果基本上是用图片实现的,用了换肤的技术,把PNG 图片用GDI+ 画上去,PNG 可以有透明,并且色彩数比GIF 多,GDI+ 可以处理PNG。不过,它还有点牛的地方是,如果设成普通的鼠标不穿透的,它居然也能把窗口停在最底下,不知道这点是怎么实现了,观察了半天的它的消息和窗口风格设置,都没看出个所以然了。但是我想,这样的功能,应该网上已经有很多讨论和代码了吧。

本文地址:

https://minidump.info/blog/2006/07/E6-97-A5-E5-8E-86-E8-BD-AF-E4-BB-B6-E7-9A-84-E7-95-8C-E9-9D-A2-E5-AE-9E-E7-8E-B0/

感觉本文不错,不妨小额鼓励我一下!
上一篇

我要动力

我现在要的是动力,是灵感。今天在公司里,给同事演示那个数据分析程序时,偶然发现那个很严重的bug,原来我一直混淆了那两个概念,这样也好,正好给自己充电补足。在网上晃悠了半天,实在无所事事啊!看了那么多的论坛和帖子,却提不起精神。我只能在QQ上偷偷地望着你,就像那篇著名的网上小诗一样。我什么都不...…

imported from CSDN 全文阅读
下一篇

收餐具

今天和小思宇去那边把餐具收了一下,就是几只碗,不锈钢的汤盆,还有个美的的电饭煲。女人的想法就是有点怪,叫她把所有的碗和盆都拿走,开始死活不要,说只要有个碗就行了,因为碗好看,而且只是用来一个人泡泡面吃。后来好说歹说,才把所有的东西都装在塑料袋里都拿走了,还一边走一边说,说了好几次哦,真的好几次...…

imported from CSDN 全文阅读