duilib进阶教程 -- 设置资源路径 (15)
在前面的教程里,虽然图片都放到了skin文件夹里,但是XML却都在外面,当XML比较多时,就不太好看啦,如下图:

所以需要整理一下,将XML也放入skin文件夹,这样exe的目录就简洁多了:

将XML放入skin文件夹后,代码也要跟着变化哦,在duilib的Demo里经常可以看到如下代码:
(其中SetResourcePath是设置资源的路径,包括XML和图片等各种资源;SetResourceZip是指资源都放到ListRes.zip文件里了。)
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin"));
CPaintManagerUI::SetResourceZip(_T("ListRes.zip"));
而Alberl的教程中一直只有一行代码
CPaintManagerUI::SetInstance(hInstance);
这是因为WindowImplBase已经将CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath())封装到内部了,所以无需再调用,不过当我们将资源路径设置到skin文件夹时,却发现SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin"));后,程序会崩溃。这是因为需要重载WindowImplBase的GetSkinFolder函数,并且return _T("skin"),不过这就让那几个类都不通用了,显然不是个好方法,因此需要找一个通用的方法,那就是改进WindowImplBase,只需将WindowImplBase::OnCreate函数里的
CDialogBuilder builder;
CDuiString strResourcePath=m_PaintManager.GetInstancePath();
strResourcePath+=GetSkinFolder().GetData();
m_PaintManager.SetResourcePath(strResourcePath.GetData());
改成下面这样即可:
CDialogBuilder builder;
CDuiString strResourcePath=m_PaintManager.GetResourcePath();
if (strResourcePath.IsEmpty())
{
strResourcePath=m_PaintManager.GetInstancePath();
strResourcePath+=GetSkinFolder().GetData();
}
m_PaintManager.SetResourcePath(strResourcePath.GetData());
这样我们就可以像Demo里那样直接调用CPaintManagerUI::SetResourcePath函数啦,不过还需要将XML里面的资源路径改一下,因为XML里面的资源都是以skin\XXX.png 这种形式的,而设置了资源路径到skin文件夹之后,就不需要skin前缀了,因此直接用XXX.png就可以访问到skin路径下的文件。
而SetResourceZip是将资源压缩到zip文件里,有的小伙伴不想让人发现资源,于是想弄个加密压缩包,或者把压缩包分成几部分,这样就不能直接解压了。当然,还有各种各样的方法可以让人看不到资源文件。
但是Alberl早在《仿迅雷播放器教程 -- 提取exe资源(12)》就告诉了大家一种方法,不仅可以直接提取QQ的rdb文件,还可以提取迅雷的加密XAR文件,不管是加密的,还是分成几部分的文件,都是可以快速提取出来的,重要的是,根本不需要一丁点黑客知识,也不需要花时间去研究rdb和XAR的格式,更不需要去破解密码,直接点击下鼠标就OK了。
所以如果还没有去隐藏资源,但是又想这样做的小伙伴们,Alberl的建议就是:如果能快速搞定加密和扰乱文件,那就无所谓了,如果不会这些,就没必要花时间去弄了,因为阿猫阿狗拿了你的资源也干不了啥事,而高手的话,你那点小伎俩根本就难不倒他,小公司模仿你的软件也威胁不了你,大公司也看不上你的软件,所以从商业的角度,只是浪费时间而已。当然,如果你实在不想共享资源,那就去做吧 ~O(∩_∩)O~
duilib进阶教程 -- 设置资源路径 (15)的更多相关文章
- duilib进阶教程 -- 总结 (17)
整个教程的代码下载:http://download.csdn.net/detail/qq316293804/6502207 (由于duilib进阶教程主要介绍界面,所以这个教程只给出界面相关的代码,完 ...
- duilib进阶教程 -- Container控件的bug (14)
在<duilib进阶教程 -- TreeView控件的bug (9)>里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug. ...
- duilib进阶教程 -- TreeView控件(6)
代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...
- duilib进阶教程 -- 在MFC中使用duilib (1)
由于入门教程的反响还不错,因此Alberl就以直播的形式来写<进阶教程>啦,本教程的前提: 1.请先阅读<仿迅雷播放器教程> 2.要有一定的duilib基础,如果还没,请先阅读 ...
- duilib进阶教程 -- Container控件 (3)
前面两个教程的目的是教大家与MFC结合,那么从这篇起,将不再使用MFC,而使用纯win32项目,本文的所有知识已经在<duilib入门教程>里面讲过了,因此基础知识不再赘述. 代码下载:h ...
- duilib进阶教程 -- 各种控件的响应 (10)
到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...
- duilib进阶教程 -- 图片和文字的位置调整 (5)
已经有8个晚上没写教程啦,因为之后遇到了一些问题,主要是TreeView控件的问题,这个问题搞了几个晚上,然后还需要调试代码才能知道它的用法,虽然能够调试出来,但毕竟没什么含金量,只是重复劳动而已,相 ...
- duilib进阶教程 -- TreeView控件的不足 (7)
上一个教程中,虽然播放列表的框架和迅雷一样了,但是字体大小.文字居中还没有解决.如果是刚学duilib,搞定这个可不容易,因为在有了入门教程的指导后,很容易就想到去看[属性列表.XML],但是当你试了 ...
- duilib进阶教程 -- Label控件的bug (8)
上个教程说到了TreeView的文字不能垂直居中的问题,而我们用LabelUI其实是可以垂直居中的,为什么不说是TreeView的bug,而说是Label控件的bug呢?因为影响TreeView垂直居 ...
随机推荐
- 根据excel表格中的内容更新Sql数据库
关于[无法创建链接服务器 "(null)" 的 OLE DB 访问接口 SQL Server 2008读取EXCEL数据时,可能会报这个错误:无法创建链接服务器 "(nu ...
- libcurl安装使用方法-简单实用(摘录)
http://curl.haxx.se/libcurl/c/example.html 官网c例子http://curl.haxx.se/download/curl-7.21.3.tar.gz 下载地址 ...
- 《机器学习实战》学习笔记——第13章 PCA
1. 降维技术 1.1 降维的必要性 1. 多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯.2. 高维空间本身具有稀疏性.一维正态分布有68%的值落于正负 ...
- myBatis自动生成mapping,dao和model
myBatis没有自动封装实体类.所以都需要自己编写,但是表数据过多时.编写难度就会增加,错误率也会增加! 所以myBatis提供mybatis-generator-core-1.3.2-bundle ...
- 转:pack URI in WPF
一开始看到WPF里面经常用如下语句来构造资源文件Uri: Uri uri = new Uri("/AssemblyName;component/image.png"); 我还以为这 ...
- 浏览器css bug及bug解决方法
Bugs及解决方案列表(以下实例默认运行环境都为Standard mode): 如何在IE6及更早浏览器中定义小高度的容器? 方法: #test{overflow:hidden;height:1px; ...
- 自定义php安装(2)—mysql安装和php整合
1. 写一段php 代码来测试是否成功! //目前你看不懂,没关系 <?php $conn=mysql_connect("localhost","root ...
- 20145225《Java程序设计》 第5周学习总结
20145225<Java程序设计> 第5周学习总结 教材学习内容总结 第八章 异常处理 8.1语法与继承架构 try.catch:try.catch代表错误的对象后做一些处理. 异常继承 ...
- FMDB基本应用
1.打开数据库 #import "ViewController.h" #import "FMDB.h" @interface ViewController () ...
- Git使用文档
建立项目 新建项目 进入gitlab.dev(192.168.14.28) 选择LDAP,用自己的域账号登录 点击右上角的 加号(+)新建项目 填写项目名称 选择组为 Online_Web “Visi ...