完美界面换肤解决方案
-、简介
VC里边界面换肤是比较头痛的问题,网上有不少介绍,但是大多数仅仅提供Dll或者Lib,有代码的又有很多问题,效果很差。这几日突然想到一个解决方案,有源码,皮肤有一百多个,就是采用Delphi里边成熟的界面组件vclskin,将它做成Dll来用,效果相当不错,赶紧介绍给大家。
二、效果预览
实例中的效果如下图:
效果预览
三、Dll制作
首先启动Delphi7,创建一个Dll工程。
选择Dll工程类型
然后点击保存所有按钮,设定工程名称Skin。
新建的Dll工程
然后添加VclSkin里边的ImgUtil.pas,SkinRead.pas,WinConvert.pas,WinSkinCollection.pas,WinSkinData.pas,WinSkinDlg.pas,WinSkinForm.pas,WinSkinIni.pas,Winskinmenu.pas,WinSkinStore.pas,WinSubClass.pas文件到工程中。
再添加Compilers.inc,vclskin.res文件到工程目录中。
再添加加载皮肤代码,编辑后的代码如下:
完成的代码
可以看出这个Dll只有一个函数LoadSkin,入口参数为皮肤文件路径名。
四、调用方法
创建VC工程SkinTest,VC的创建就不具体介绍了,添加代码如下:
在应用程序类里添加加载Dll,卸载Dll的代码:
m_hModule = LoadLibrary ( "Skin.dll" );
FreeLibrary ( m_hModule );
在程序的第一个对话框初始化的时候调用LoadSkin函数:
typedef int ( CALLBACK * FUNC ) ( PCHAR );
void CSkinTestDlg::InitSkin ()
{
CHAR szName [ MAX_PATH ];
CString strName = GetAppPath () + "skins//LE4-DEFAULT.skn";
FUNC pFunc = ( FUNC ) GetProcAddress ( theApp.m_hModule, "LoadSkin" );
strcpy ( szName, strName );
pFunc ( szName );
}
五、注意事项
1、 实例中包含了所有的源代码,可以随便修改它,添加从资源加载皮肤,动态换肤的功能。
2、 实例中的VclSkin4.93代码为其它公司成熟的产品,请下载后在24小时内删除。
3、 皮肤有很多,可以到网络上下载,更有皮肤编辑工具,方便自定义。
源程序和实例下载路径:http://download.csdn.net/source/496381