如何实现更换程序皮肤的功能?

ren20 2001-05-07 02:34:00
类似winamp , 可以由用户自己创建皮肤图片,更换。

如何实现?

谢谢
...全文
3107 41 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
myb123 2001-08-08
  • 打赏
  • 举报
回复
听课
tajn007 2001-05-13
  • 打赏
  • 举报
回复
听课
chen2001 2001-05-10
  • 打赏
  • 举报
回复
good!
vertex 2001-05-10
  • 打赏
  • 举报
回复
因为工作需要我做过一个skin系统,我不明白干吗要做那个,多无聊啊.让程序变得的更复杂,我不喜欢........

对了,你有没有见过编程水平很一般的人也能做出很强的带皮肤的程序?他们用的是ActiveSkin控件,效果不错的...而且有破解版...HOHOHO
weier 2001-05-10
  • 打赏
  • 举报
回复
gz
kingtsui 2001-05-10
  • 打赏
  • 举报
回复
换个思路,可以用XML来实现啊,比如MediaPlay7.0
火鸟33 2001-05-10
  • 打赏
  • 举报
回复
补充一句,它还自带几十套自带精美的皮肤,运行起来就象oicq(太菜),象redhat linux 7.0下的gnome,cool!!!!!
火鸟33 2001-05-10
  • 打赏
  • 举报
回复
补充一句,它还自带几十套自带精美的皮肤
火鸟33 2001-05-10
  • 打赏
  • 举报
回复
兄弟们,有一套c++ builder/dephi 得SkinEngine系统,封装了大部分windows常用控件,而且
可以运行时自己换skin,自己设计skin,也非常好用,还有转换工具.可惜是vcl控件。
我只能说很好很好!
kkksoft 2001-05-10
  • 打赏
  • 举报
回复
看到大家的答复我很生气!既然它存在了就说明有市场!
可以学!不过挺难!应该说麻烦!不过有实际意义!
chengt 2001-05-09
  • 打赏
  • 举报
回复
我也觉得如果用纯资源的dll可能要简单一些,如果用扩展的MFC DLL的话,可以导出类被主程序使用的话,必须关闭程序后重新启动程序才能实现换肤。
而纯资源的DLL就不必重起,只要刷新界面就可以了。
不过要实现自定义的皮肤文件这个我就不知道了。关注。
ccloud 2001-05-09
  • 打赏
  • 举报
回复
最好是用资源DLLL文件。
darkay 2001-05-09
  • 打赏
  • 举报
回复
好久没有发言啦,我在这里说两句吧。
关于怎样从路径或者是从BMP文件产生特定区域(region)的方法我就不多说啦。那个什么嘿嘿的说的都差不多了。我想说一下,我的换皮肤的想法。首先应该有一个产生皮肤的辅助工具,用于定义皮肤。这样的工具简单一点的话,可以仅仅从一个BMP文件产生就可以拉。它的主要工作是产生一个区域定义以及皮肤位图(用一个带结构格式的文件保存就行啦)。然后应用程序可以提供一个方式给用户选择皮肤文件,然后从文件中取出区域信息产生应用程序的可视区域,再读取位图信息将位图信息绘画在刚才产生的区域上面。这样基本的外貌已经完成。
现在讨论以下行为方面的处理,一般的行为大都集中在单击或双击上面。可以定义一个结构,该结构包含一个矩形RECT以及行为类型ACTION(单击或双击等)和响应动作RESPONSE。这个结构表明当鼠标在RECT产生了ACTION后应该执行什么RESPONSE。这里的RESPONSE都是预先定义好的,比如是最小化、关闭等。当然也可以由用户定义的(那就接近Plus in)了,可以将RESPONSE改成是一个函数字符串,由用户提供一个DLL,该DLL提供了字符串表明的函数的实现,应用程序根据这个字符串从DLL中找到函数入口,然后调用。
总的来说要实现一个好的换皮肤机制不是轻松愉快的事情,建议大家看看freeamp的原代码,里面有一整套换皮肤的方案。
以上文集都是空想的没有真正实现过,不知道对大家有没有帮助。(关键在于结构的考虑,技术上面现在已经不是什么问题了)
logical 2001-05-08
  • 打赏
  • 举报
回复
一、根据脚本或位图制作无规则的窗体;
二、写一个HTML文件,就是各按钮及提示等(与第一步的窗体相辅相成);
三、用CHtmlView装入上面所说的HTML文件就是外观;
四、当用户点击按钮(HTML文件定义)时CHtmlView会激发一个事件,再根据参数调用相应的函数即可。如有一按钮其对应的链接是“MYOPENFILE”,在CHtmlView激发一个浏览事件时如果其参数是“MYOPENFILE”就调用OpenFile()这个函数,OK?
这样只要窗体位图与HTML文件不同外观就不同。

上面是最简单的方法,也有皮肤是资源文件的,但我未试过。
flytiger1977 2001-05-08
  • 打赏
  • 举报
回复
不过,我要谢谢嘿嘿先生了。呵呵。
flytiger1977 2001-05-08
  • 打赏
  • 举报
回复
不过,我要谢谢嘿嘿先生了。呵呵。
lin6194 2001-05-08
  • 打赏
  • 举报
回复
我来谈一点我的方法:
1.建立.INI文件,将程序中要用到的控件的背景BMP名称、位置坐标定义好:
BackBmp,0,0
PlayButtBmp,230,150
StopButtBmp,250,150
......
2.程序中首先根据此INI文件,确定背景BMP,读入后,将BMP作背景显示在对话框中,再用SetWindowRgn()实现不规则窗口(第一位老兄说的没有跑题!)。
3.将程序中CButton类改换成其他支持背景图片的Button,如CButtonST等,将与此按钮对应的BMP调入并显示。
4.对于其他非Button的控件你可以自绘(生成一个新的类)。

你可以建立多个.INI文件,在程序中选择不同的INI就会有不同的Skin,这样就可以实现你的Skin功能了。
这只是个基本原理,其中还有很多细节需要注意,比如说,对于Button需要有多副图片,这些图片可以单独保存成多个文件,也可以保存在一个文件里(按照横向、或竖向),在程序中根据单个文件中图片的数量和图片的宽、高度分成几个独立的图片,分别用于弹起、按下、彩色、单色、无效等状态。
关于图片文件,你可以参考WinAmp中的排列方法。
另外也可以不使用INI文件而采用目录的方法,如果各位有兴趣我们可以在讨论。
lkjx 2001-05-08
  • 打赏
  • 举报
回复
有很多现成的例子呀,www.vchelp.net上就有2个
另外www.bcgsoft.com上的bcg控件也支持呀
看看他们怎么写的不就得了
blacktea 2001-05-08
  • 打赏
  • 举报
回复
简单好用的极品的东东:ActiveSkin 控件

如果不用控件那就自己写代码,着个我不会。
pgfun 2001-05-08
  • 打赏
  • 举报
回复
我是通过通过一幅图片来定义各种控制元素的大小形状的.我认为这是实现skin最好的方法.
加载更多回复(21)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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