Duilib打包皮肤文件到程序中,实现从资源中加载皮肤

来源:赵克立博客 分类: C/C++ 标签:duilib发布时间:2017-10-23 11:14:10最后更新:2017-10-23 17:41:43浏览:1988
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-10-23 17:41:43
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

本方法只适合github  duilib官方的库,其它第三方的库有自己的实现,源代码修改太多,故可能不能使用

下面是我自己从官方弄过来使用的库

https://github.com/zhaokeli/DuiLib_ANK

使用duilib写程序的时候如果皮肤文件直接放目录下可能就会被别人拿来乱修改,这可不是我们想要的,于是打包皮肤文件进程序这个需求就产生啦,虽然防止不了破解的大神但是一般的小白还是能防的,并且还方便啦一些喜欢绿绿色单一文件的朋友,我就是喜欢一个文件随身带!

实现方法

把你的皮肤目录打包,注意是从皮肤根目录打包成zip文件,然后打开项目添加->资源->导入 选择你的皮肤zip压缩包

image.png

然后在弹出的窗口中输入类型 ZIPRES  因为一般情况导入的资源很多我们要给它定义一个类型,并且这个类型名字是固定的,因为duilib里就是用这个类型来加载资源的,不能用其它类型,除非你改动duilib源码,不过也没有这个必要啦,一般情况下对话框中下面是没有  "ZIPRES" 这个提示的,下图中的有个提示是因为我之前已经添加过啦,又添加啦一次方便截图记录

 image.png

image.png

添加完成后注意资源里会有一个 ZIPRES类型  id 为 IDR_ZIPRES1的资源id(名字可能会不一样,找到就可以),这个就是我们后面要用到的皮肤资源id

首先保存你的窗口类继承 WindowImplBase 类并且要实现下面几个方法来实现从zip资源中加载皮肤文件,下面是方法的声明

virtual CDuiString GetSkinFolder() override;
virtual CDuiString GetSkinFile() override;
//返回加载皮肤的方法是zip压缩包还是文件夹还是zip资源
UILIB_RESOURCETYPE GetResourceType() const;
//如果是皮肤是zip资源就返回资源id
LPCTSTR GetResourceID() const;

方法说明

很明显上面的四个方法是定义当前窗口类的皮肤是怎么加载的 

GetSkinFolder是设置加载当前窗口皮肤文件的根目录,

GetSkinFile是设置当前窗口的Xml文件,路径是上面设置的目录位置,

GetResourceType是设置皮肤资源的类型

duilib中定义的类型为

enum UILIB_RESOURCETYPE

{

    UILIB_FILE=1,               // 来自磁盘文件

    UILIB_ZIP,                      // 来自磁盘zip压缩包

    UILIB_RESOURCE,         // 来自资源

    UILIB_ZIPRESOURCE,  // 来自资源的zip压缩包

};

GetResourceId是设置从哪个资源中加载皮肤,只有当GetResourceType返回值是 UILIB_ZIPRESOURCE时这个值才有效

方法的实现

CDuiString MainWnd::GetSkinFolder()
{
    return "skin/sendhttprequest";
}
CDuiString MainWnd::GetSkinFile()
{
    return _T("main.xml");
}
UILIB_RESOURCETYPE MainWnd::GetResourceType()  const {
#ifdef _DEBUG
	return UILIB_FILE;
#else
	//下面是资源zip文件,调试期间用上面那个就可以
	return UILIB_ZIPRESOURCE;
#endif
}
LPCTSTR MainWnd::GetResourceID() const
{
        //当上面类型的从资源加载时才有效
	return MAKEINTRESOURCE(IDR_ZIPRES1);
}

注意:当从资源中加载皮肤时,GetSkinFolder这个设置项就无效啦,皮肤和图片的加载路径为压缩包的路径,所以我们平时开发时可以把GetResourceType返回值设置为  UILIB_FILE  上线时 改成  UILIB_ZIPRESOURCE  并且把压缩包传上去就可以啦其它的设置都不用动。


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python