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垂直居 ...
随机推荐
- 【python3】collections系列介绍
文章来源:http://www.jb51.net/article/48771.htm (http://www.cnblogs.com/wushank/p/5122786.html) 修改人:天马流行拳 ...
- 读取assets文件夹下图片(ods_interview)
今天看了一道题,现在总结一下里面使用到的知识点: 1.assets文件的访问: 原文出处:http://blog.csdn.net/fengyuzhengfan/article/details/383 ...
- LeetCode OJ 274. H-Index
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- Java写操作
//:ThinkingInJava/net.mindview.io/write2File.java package net.mindview.io; import java.io.BufferedRe ...
- php 继承
说多重继承之前首先说下与其相对的单一继承,单一继承指的是一个类只可以继承自一个父类,从现实生活中举例就是说一个儿子只有一个父亲.那么多重继承就好理解了,多重继承指的是一个类可以同时从多于一个父类继承行 ...
- dropbear
生成ssh连接所需要的公钥,如下: /usr/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key (dss加密,长度默认 ...
- 阿牛OCX编程助手
※◆☆★☆◆※欢迎使用阿牛OCX编程助手,此程序为按键精灵专用,如终请联系作者QQ:82850696*0*测试版已停用*0*2014-12-27 14:05:59*哈密*E2873D0137C6D04 ...
- android压力测试命令monkey详解
一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出 ...
- css3的学习笔记1
一. 边框 1. border-color border-color是设置边框的颜色.包括border-top-color,border-left-color,border-right-colo ...
- Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...