读书人

求教动态换肤解决办法

发布时间: 2013-06-19 10:26:40 作者: rapoo

求教动态换肤
求教动态换肤解决办法

金山卫士、360、迅雷、酷狗都有差不多如上图的动态换肤。求教这是怎么做的?
有大侠能给份源码不? rydiy.zhwi@gmail.com
或者给点框架思路也行。
找了几晚上了,金山卫士的开源也还没到换肤的模块,叩谢各位大神。。。。
[解决办法]

引用:
首先你要明白,这些软件使用的是directui,也就是说这些控件都是没有句柄的,可以看做,这个界面就是一个dc,所以更换背景图片只需要轻轻的刷一下界面就可以了。如果说用基于句柄的窗口,实现换肤效率很比较低,基本上就是每个控件都先copy父窗口背景后再绘制自己。

不同意,win32做这些也很方便的,效率应该比自已绘制还高一些。再说,dui方式,不是谁都可以搞定的。
dui方式换肤,也是要先画父窗口,再画子控件,如果优化的不好,画每个子控件的时候,如果都刷新一下父窗口,效率更低,反而是win32方式,控件只刷新自己,效率会高很多。
[解决办法]
引用:
Quote: 引用:

首先你要明白,这些软件使用的是directui,也就是说这些控件都是没有句柄的,可以看做,这个界面就是一个dc,所以更换背景图片只需要轻轻的刷一下界面就可以了。如果说用基于句柄的窗口,实现换肤效率很比较低,基本上就是每个控件都先copy父窗口背景后再绘制自己。

不同意,win32做这些也很方便的,效率应该比自已绘制还高一些。再说,dui方式,不是谁都可以搞定的。
dui方式换肤,也是要先画父窗口,再画子控件,如果优化的不好,画每个子控件的时候,如果都刷新一下父窗口,效率更低,反而是win32方式,控件只刷新自己,效率会高很多。

win32很明显没有directui方式方便。
win32,我们一般都会给form和panel加cache来提高绘制效率,所以换肤时必须要删除这些cache。
dui方式,每个控件只需画自己的(都是在父窗口dc上画)。
换肤时要刷新父窗口(win32和dui都需要),不必刷新控件(除非设置clip样式,否则子控件会被刷新的)。
dui方式中子控件刷新自己时不需要刷新整个窗口,刷新自己所在区域就行了。
[解决办法]
dui就除了控制键盘输入麻烦点 其他都很方便
[解决办法]
谷歌code里面有duilib的源码,如果需要,我可以发给你,控件基本都补全了。
[解决办法]
directui的方式有N种。 不一定的。看个人理解不同 directui只是没有HWND罢了 全部在一个HWND绘制
[解决办法]
特意写了两个测试程序试了一下。在两个1024*768的干净父窗口中,其中一个创建一个干净的800*600的有句柄的子窗口,另一个创建一个800*600的无句柄子窗口。子窗口只做一件事:就是显示一张800*600的bmp图。父窗口也只做一件事:就是显示一张1024*768的bmp图。
然后两个程序让子窗口分别刷新1000次计时取平均值。结果如下:
有句柄的,花费约1800ms.
无句柄的,花费约2800ms.

读书人网 >VC/MFC

热点推荐