换肤源码(200)

  • 主题发起人 主题发起人 linuxping
  • 开始时间 开始时间
L

linuxping

Unregistered / Unconfirmed
GUEST, unregistred user!
像酷狗音乐,迅雷,金山词霸,芊芊静听等,都有一整套的换肤功能,请教如何实现?
 
附加一句: vclskin的代码看的很晕乎。。。。。有能讲讲实现原理的就比较好。。。。。。。。。。
 
去下载BusinessSkinForm吧
 
具体原理其实一句话就能说清楚的1.HookWindow,用你自己的WndClass把默认的替换掉2.按照控件类别拦截WM_PAINT WM_ERASEBKGD WM_NCPAINT WM_PRINT WM_PRINTCLIENT等等相关的消息,如果你不处理的,调用的原消息处理函数比较特别的是POPUPMENU,有两种实现:1.QQ是自己拦截POPUP的消息,不用默认的TrackPopupMenu,然后自己show一个POPUP类型的窗体2.Hook一下user32.dll里的那个POPUPMENU窗体,然后同上,具体的这个在codeproject里有一些人在研究,还提到了undocumented api的问题,你可以google一把。
 
换肤使用AlphaControls,很好的一套控件
 
没必要HOOK,搞那么麻烦。。不知道LZ有没有注意到千千静听的皮肤包总会带一个XML文件。这个文件是保存图片位置的。而且,一般窗口都是没有TITLE的。菜单要自绘也简单。具体做法就是读XML或其他配置文件,把具体图片在窗口上的位置给读出来,然后照直了往窗口上画就完了
 
to cst_zf:对你的方法很感兴趣。 实现起来怕不是很容易的事儿。“控件类别拦截WM_PAINT WM_ERASEBKGD WM_NCPAINT WM_PRINT WM_PRINTCLIENT等等相关的消息”如何区分“控件类别”,使用类名吗?你能列出需要挂钩的全部消息吗?能给些代码最好多谢to skaly:不想使用3方控件。。。。。。to bahamut8348:你的想法很好。但是如果要改变滚动条等的颜色,恐怕就不行了。
 
那些东西的滚动条全部是自绘出来的。。你仔细看他的皮肤包就会发现滚动条的图片。。具体怎么做就是你自己代码怎么控制了。。要做一个自绘滚动条很容易的
 
to cst_zf, 能留个QQ吗?我的qq:254930005
 
原理就是 Hook,没啥特别的。
 
to 白河愁,我也觉得hook是最好的方式。至少可以把换肤的代码从其他代码中分离出来。但是我需要更多的相关资料,能帮下忙吗?
 
需要什么资料?如果不懂Hook,就没办法了。懂的话,paint的时候画上自己的素材就行了。
 
to 白河愁,cst_zf: 需要hook的应该不止wm_paint吧你用一句话概括的似乎也不错。但做起来总不是那么简单,如果你写过换肤的控件或模块,那么你应该能过讲的更多,为什么不仔细说说?
 
vcl很经典的换肤控件
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部