转载请说明原出处,谢谢~~

昨天把大致布局分析了一下,昨天晚上把布局写好实现了,今天把大致的功能完成了一下,现在的外观已经和原酷狗的换肤界面完全一样,其中的调整播放列表透明度和设置整个软件透明度的代码已经完成了,先把效果图贴一下,然后开发说开发过程。

开发步骤一:

布局的部分我就不说了,昨天已经分析了,只要用好素材,花点时间就能把界面效果做出来,其中“官方皮肤”和

“我的皮肤”调用CTabLayout可以实现两个界面的切换,如图:

原酷狗在切换这两个界面时是有动画效果的,所以在这个地方我是用来 扩展后的CTabLayout控件

CUIAnimationTabLayout,实现了切换时的动画效果。

开发步骤二:

接下来我先把设置播放列表透明度和设置皮肤透明度的功能完成。

在点击了列表透明的组合框后会弹出个含有滑动条控件的界面来设置透明度,当鼠标移出它的范围时会自动销毁

从功能外观上这是属于组合框的范畴,但是在和duilib的组合框的功能对比后发现,duilib无法实现这样的效果,实际上duilib的组合框CComboUI的弹出界面是出现在下方而不是上方,第二CComboUI的内容一般是多个文字选项,第

三CComboUI的文字需要通过点击它下拉菜单的选项来改变而无法单独设置。综上三点不适合用CComboUI来做这部

分。

那应该怎么做?我首先想到的是使用已经写好的菜单控件来做这个功能,的确,菜单从功能上还是外观都可以胜

任,不过有一点就是菜单不会在鼠标移除范围时自动销毁。反过来一想我又觉得用菜单不合适,一来菜单的功能比这

个复杂得多,编写菜单用了1000多行代码,用在这里感觉降低程序性能,二来不至于为了自动销毁功能再去修改菜单

的代码。所以干脆我又写了一个名叫CPopupWidget的专门用于弹出小挂件的类,这个类就是个简单的弹出窗体类,

继承了CWindowWnd和INotifyUI。整个类代码只用了大概250行,和其他窗体类没什么太大区别。

自动销毁这个功能很容易实现,只要在HandleMessage函数中处理WM_MOUSERLEAVE消息,调用close()函数

就可以了。使用这个CPopupWidget类的时候传入xml布局文件进去来决定他的外观。

在这个窗体中有一个CSliderUI控件,这个控件在滑动时会去改变主窗体的播放列表的透明度,为此我需要把

CSliderUI控件的滑动事件通知到主窗体,这部分的实现代码已经在《为duilib的MenuDemo增加消息响应,优化代

码和显示效果》点击打开链接,这里讲过了,使用的是第一种消息通知方法。

主窗体接收到了_T("valuechanged") 或者 _T("movevaluechanged")消息后,先判断是否是要改变播放列表透明

度的事件,确认后去改变透明度。有些朋友不知道怎么去改变duilib的一个控件的透明度,其实很简单:为对应的控件

设置一个背景图并且设置fade属性,比如bkimage="file='UI\LeftTab\List_bk.png' fade='122'",背景图是任意的,关键

在于fade属性,他是改变图片透明度的属性,所以只要动态修改这个属性的值就可以改变任意控件的背景的透明度

了。

最终的设置列表透明度的效果如下:

开发步骤三:

接下来完成设置窗体透明度的部分,在原酷狗里面,这个窗体透明度的的弹出窗体的外观和设置播放列表的透明

度的外观是一样的,这就大大减少了我的工作量,如图

同样的原理,在主窗体接收到滑动消息后,先确认是改变窗体透明度的消息,然后开始设置,在duilib的

CPaintManager类中已经有现成的函数SetTransparent,直接拿来用就可以改变整个窗体的透明度,不用想也知道其

实就是调用了 系统的SetLayeredWindowAttributes函数实现的。我就不赘述了。

比较麻烦的一点就是,在主窗体、皮肤设置窗体和小挂件窗体之间有许多共享的信息,这些信息的沟通就只能

靠传递相应的参数来实现了,主窗体的指针要传到皮肤设置窗体,好让皮肤设置窗体得知一些主窗体的透明度信息来

初始化自己的控件,小挂件窗体需要获取主窗体的CPaintManager实例的指针来发送消息,同时也需要皮肤设置窗体

的指针来改变这两个组合框内的值,。小挂件的参数的传递主要都在他

的Init函数中,Init函数的参数我已经做了注释,大家可以自己看源码。

实际上,那个看似组合框的控件并不是组合框,而是一个按钮,只不过背景图片中添加了个小箭头来达到视觉上

的效果。^_^~~

开发步骤四:

做完了两个功能,接下来把自定义皮肤按钮的功能做一下,在单击自定义皮肤按钮时会弹出系统的打开对话框去选

择一个图片来做皮肤,这个功能实现起来最简单,只需要用GetOpenFileName函数来封装一个打开对话框的函数去调

用就可以了,最后把返回的路径的值处理一下就可以用了。

结束:

今天就写这么多代码吧,另外还有几个没实现的功能等明天再做。第一个没实现的功能是调色板功能,原酷狗的调

色板如下:

在这里任意选择颜色后可以应用到整个窗体。

第二个没做其实就是换肤,实际上我还没有写换肤的代码,就是点击一个图片就让整个软件的所有窗口的背景图

统一变换。但是实际这个最简单的功能,无非就是通知所有窗口换个背景图,所以不着急做这个功能。

第三个没有做的是每个显示的背景图的小图的动态外观,原酷狗的背景图的小图标,有normal、hover、down等

多种状态,如图

当鼠标经过时会有个黑色图片覆盖,并且在他上面显示出作者的一些信息。要实现这个效果应该另外开发一个控

件来支持动态的信息展示效果,不过这个控件的开发难度比起播放列表控件要简单得多,应该很容易做出来。

CWidgetPopup类的下载地址:点击打开链接

     Redrain  2014.8.7  18:15

转载于:https://www.cnblogs.com/redrainblog/p/4275833.html

仿酷狗音乐播放器开发日志十八——换肤功能的实现二:改变控件和窗体透明度(附挂件类源码)...相关推荐

  1. 仿酷狗音乐播放器开发日志十八——换肤功能的实现二:改变控件和窗体透明度(附挂件类源码)

    转载请说明原出处,谢谢~~ 昨天把大致布局分析了一下,昨天晚上把布局写好实现了,今天把大致的功能完成了一下,现在的外观已经和原酷狗的换肤界面完全一样,其中的调整播放列表透明度和设置整个软件透明度的代码 ...

  2. 仿酷狗音乐播放器开发日志十四——右侧乐库的实现

    在使用酷狗播放器时,左侧功能块和右侧乐库功能是最常用的了,如果要下载音乐或者搜索自己喜欢的歌曲那就少不了右侧乐库.原版的乐库的截图如下     他拥有5个分类,分别是乐库.电台.MV.直播.歌词.从外 ...

  3. 仿酷狗音乐播放器开发日志十五——音乐电台列表控件的实现

    转载请说明原文出处,谢谢~~ 前些日子封装了好几天控件,把webkit浏览器控件,vlc视频播放控件,音频播放控件做好了,做这些控件一来是可以单独使用,用到其他项目中,而来可以直接用到这个仿酷狗播放器 ...

  4. 仿酷狗音乐播放器开发日志二十二 动态调色板控件第二版(性能大幅提升附源码)...

    转载请说明原出处,谢谢~~ 在上次写的博客<仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)>发布后,我在群里和网友讨论这个控件的性能和优 缺点,发现了他很多不足,还有很多提升 ...

  5. 仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)

    转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就只剩下调色板功能没有做了,我本以为会很简单,但是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: 我原本 ...

  6. 仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源代码)

    转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就仅仅剩下调色板功能没有做了.我本以为会非常easy.可是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: ...

  7. 仿酷狗音乐播放器开发日志——整体框架分析

    转载请说明出处,谢谢~~ 学习duilib界面库有一段时间了,除了仓鼠软件共享以外还没用它开发过什么完整的软件项目.今天看到酷狗音乐播放器做得不错,经过几年的改革,酷狗现在的UI已经相当不错了.在这个 ...

  8. 仿酷狗音乐播放器开发日志二十三 修复Option控件显示状态不全的bug(附源码)...

    转载请说明原出处,谢谢~~ 整个仿酷狗工程的开发将近尾声,现在还差选项设置窗体的部分,显然在设置窗体里用的最多的就是OptionUI控件,我在写好大致的布局后去测试效果,发现Option控件的显示效果 ...

  9. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...

最新文章

  1. mysql 查看当前连接数 和 最大连接数
  2. 最大团问题-分支界限法
  3. jmeter之ip欺骗
  4. 转:Oracle物理文件
  5. python批量读取文件名_Python遍历目录并批量更换文件名和目录名的方法
  6. ZetCode C#/vb.net 教程
  7. TikTok 与 Oracle 的交易将开创两个危险的先例
  8. 【第二周】结对编程(宫丽君和林莉):四则运算
  9. java画板代码_java 画板画图程序
  10. 一个华为人辞职创业后的几个反思【转】
  11. 教大家一个快速批量去水印下载快手视频、图集的方法技巧
  12. Hibernate二级缓存
  13. 单片机快速开根号函数
  14. MapReduce实现kmeans算法
  15. 2015出现的25项最佳发明
  16. 手机实名检测 API数据接口
  17. joda DateTimeFormatter simpleDateFormat
  18. AE基础教程第一阶段——09快速预览
  19. 基于 C++ 设计的(控制台)唐诗三百首【100010789】
  20. 条件测试 linux,linux系统中条件测试语句

热门文章

  1. 华微电子否认与奇虎360有“绯闻”
  2. 在cmd中使用命令来编译并运行java程序,导入其他jar包,使用windows批处理文件
  3. FLEX 1.5 正式提供下载
  4. 详细讲解如何安装原生安卓电子市场(android market)
  5. Scala函数式编程实战
  6. 2017精选BIM案例分享介绍及下载
  7. Voronoi Noise
  8. 网络推广之论坛营销发帖推广
  9. tomcat问题:导入源码报程序包aQute.bnd.annotation.spi不存在
  10. (折扣计算)需求说明:普通顾客购物满100元打9折;会员购物打8折;会员购物满200元打7.5折(if-else)