求教动态换肤

rydiy 2013-03-18 11:46:40


金山卫士、360、迅雷、酷狗都有差不多如上图的动态换肤。求教这是怎么做的?
有大侠能给份源码不? rydiy.zhwi@gmail.com
或者给点框架思路也行。
找了几晚上了,金山卫士的开源也还没到换肤的模块,叩谢各位大神。。。。
...全文
4886 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rydiy 2013-05-30
  • 打赏
  • 举报
回复
很抱歉才来回帖, 多谢个人大神, 我参考kchangeskin的源码解决了。很佩服各位大神对ui的深入了解,小菜努力ing。
psbeond 2013-05-28
  • 打赏
  • 举报
回复
特意写了两个测试程序试了一下。在两个1024*768的干净父窗口中,其中一个创建一个干净的800*600的有句柄的子窗口,另一个创建一个800*600的无句柄子窗口。子窗口只做一件事:就是显示一张800*600的bmp图。父窗口也只做一件事:就是显示一张1024*768的bmp图。 然后两个程序让子窗口分别刷新1000次计时取平均值。结果如下: 有句柄的,花费约1800ms. 无句柄的,花费约2800ms.
Yun__ 2013-05-27
  • 打赏
  • 举报
回复
directui的方式有N种。 不一定的。看个人理解不同 directui只是没有HWND罢了 全部在一个HWND绘制
lvdalin 2013-05-27
  • 打赏
  • 举报
回复
引用 4 楼 zhoujielunzhimi 的回复:
[quote=引用 3 楼 lvdalin 的回复:] [quote=引用 1 楼 zhoujielunzhimi 的回复:] 首先你要明白,这些软件使用的是directui,也就是说这些控件都是没有句柄的,可以看做,这个界面就是一个dc,所以更换背景图片只需要轻轻的刷一下界面就可以了。如果说用基于句柄的窗口,实现换肤效率很比较低,基本上就是每个控件都先copy父窗口背景后再绘制自己。
不同意,win32做这些也很方便的,效率应该比自已绘制还高一些。再说,dui方式,不是谁都可以搞定的。 dui方式换肤,也是要先画父窗口,再画子控件,如果优化的不好,画每个子控件的时候,如果都刷新一下父窗口,效率更低,反而是win32方式,控件只刷新自己,效率会高很多。[/quote] win32很明显没有directui方式方便。 win32,我们一般都会给form和panel加cache来提高绘制效率,所以换肤时必须要删除这些cache。 dui方式,每个控件只需画自己的(都是在父窗口dc上画)。 换肤时要刷新父窗口(win32和dui都需要),不必刷新控件(除非设置clip样式,否则子控件会被刷新的)。 dui方式中子控件刷新自己时不需要刷新整个窗口,刷新自己所在区域就行了。[/quote] 你说的恰恰相反。win32才是自己画自己,因为win32控件,有自己的dc。dui的控件,连dc都没有,怎么可以自己只管画自己呢?dui甚至都不能自己决定自己什么时候绘制,自己想绘制的时候,必须父窗口先绘制,然后再绘制自己和其它兄弟控件,这样,才能保证自己不绘制在临时dc上。否则其它窗口挡住控件再移开,控件的外观就变了。dui的控件绘制时,必须父窗口连同其它兄弟控件一起绘。
zlandme 2013-05-25
  • 打赏
  • 举报
回复
谷歌code里面有duilib的源码,如果需要,我可以发给你,控件基本都补全了。
hurryboylqs 2013-05-24
  • 打赏
  • 举报
回复
dui就除了控制键盘输入麻烦点 其他都很方便
sumos 2013-05-24
  • 打赏
  • 举报
回复
引用 3 楼 lvdalin 的回复:
[quote=引用 1 楼 zhoujielunzhimi 的回复:] 首先你要明白,这些软件使用的是directui,也就是说这些控件都是没有句柄的,可以看做,这个界面就是一个dc,所以更换背景图片只需要轻轻的刷一下界面就可以了。如果说用基于句柄的窗口,实现换肤效率很比较低,基本上就是每个控件都先copy父窗口背景后再绘制自己。
不同意,win32做这些也很方便的,效率应该比自已绘制还高一些。再说,dui方式,不是谁都可以搞定的。 dui方式换肤,也是要先画父窗口,再画子控件,如果优化的不好,画每个子控件的时候,如果都刷新一下父窗口,效率更低,反而是win32方式,控件只刷新自己,效率会高很多。[/quote] win32很明显没有directui方式方便。 win32,我们一般都会给form和panel加cache来提高绘制效率,所以换肤时必须要删除这些cache。 dui方式,每个控件只需画自己的(都是在父窗口dc上画)。 换肤时要刷新父窗口(win32和dui都需要),不必刷新控件(除非设置clip样式,否则子控件会被刷新的)。 dui方式中子控件刷新自己时不需要刷新整个窗口,刷新自己所在区域就行了。
lvdalin 2013-05-24
  • 打赏
  • 举报
回复
引用 1 楼 zhoujielunzhimi 的回复:
首先你要明白,这些软件使用的是directui,也就是说这些控件都是没有句柄的,可以看做,这个界面就是一个dc,所以更换背景图片只需要轻轻的刷一下界面就可以了。如果说用基于句柄的窗口,实现换肤效率很比较低,基本上就是每个控件都先copy父窗口背景后再绘制自己。
不同意,win32做这些也很方便的,效率应该比自已绘制还高一些。再说,dui方式,不是谁都可以搞定的。 dui方式换肤,也是要先画父窗口,再画子控件,如果优化的不好,画每个子控件的时候,如果都刷新一下父窗口,效率更低,反而是win32方式,控件只刷新自己,效率会高很多。
向立天 2013-05-24
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
sumos 2013-03-18
  • 打赏
  • 举报
回复
首先你要明白,这些软件使用的是directui,也就是说这些控件都是没有句柄的,可以看做,这个界面就是一个dc,所以更换背景图片只需要轻轻的刷一下界面就可以了。如果说用基于句柄的窗口,实现换肤效率很比较低,基本上就是每个控件都先copy父窗口背景后再绘制自己。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧