duilib将资源文件压缩成zip并打包到exe的资源中

本文参考了redrain大佬的http://blog.csdn.net/zhuhongshu/article/details/40146239文章。因为原文是基于WinImplBase类的,个人习惯基于CWindowWnd来做。因此额外摘抄一部分并微微调整一下代码,以作记录。

整个程序的开发跟正常的 使用资源目录+xml+图片 这种方式流程一样。也可以先用这种方式来开发,方便开发调试。

整个开发完成后,就是将资源压缩为zip,并且合并到exe资源中的操作了。

1.将使用的所有的资源文件(xml+图片等)压缩为res.zip之类的。注意zip中目录问题。

2.将压缩好的res.zip放到代码目录下的res文件夹里。(什么?没有这个文件夹?建议自己建立一个,另外放个ico之类的文件放到资源中,后面添加为程序的图标也是极好的嘛。)

3.右键自己的工程项目->添加->资源->Version,然后双击Version;(为什么先添加一个Version?1.给自己软件加个版本信息嘛;2.便于自动生成.rc文件和resource.h)

4.右键资源文件->添加->导入,自动打开了文件选择框,文件选择框右下角切换为所有文件,选择res.zip,然点打开就行了。资源类型填个ZIPRES即可。此时应该是将这个zip资源打开了,自己保存一下就行了。在VS的左侧可以看到res.zip了。(如果不在资源文件的筛选器下,自己拖动到那下面即可,看着舒服)

5.右键自己的.rc文件即可看到res.zip的路径和资源ID之类的了,当然resource.h里面也有对应的宏了已经。此时将resource.h引入到需要它的地方(比如main.cpp)

6.main.cpp中定义个全局变量

LPBYTE g_lpResourceZIPBuffer = NULL;

然后在之前设置资源的地方,将

CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()+_T("\\res"));

之类的代码给注释掉,添加上如下代码

        //从资源中加载zip
	HRSRC hResource = ::FindResource(CPaintManagerUI::GetResourceDll(), MAKEINTRESOURCE(IDR_ZIPRES1),_T("ZIPRES"));
	if( hResource == NULL )
		return 0L;
	DWORD dwSize = 0;
	HGLOBAL hGlobal = ::LoadResource(CPaintManagerUI::GetResourceDll(), hResource);
	if( hGlobal == NULL ) 
	{
		::FreeResource(hResource);
		return 0L;
	}
	dwSize = ::SizeofResource(CPaintManagerUI::GetResourceDll(), hResource);
	if( dwSize == 0 )
		return 0L;
	g_lpResourceZIPBuffer = new BYTE[ dwSize ];
	if (g_lpResourceZIPBuffer != NULL)
	{
		::CopyMemory(g_lpResourceZIPBuffer, (LPBYTE)::LockResource(hGlobal), dwSize);
	}
	::FreeResource(hResource);
	CPaintManagerUI::SetResourceZip(g_lpResourceZIPBuffer, dwSize);

OK,完成,自己编译测试吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

性能优化:调整 I/O 相关的等待

编辑手记:对Oracle数据库进行调整优化,基本上最终都可以归结到I/O调整上,因此,了解如何来优化Oracle数据库的I/O对于一个DBA来说就显得至关重要。...

2703
来自专栏一个爱吃西瓜的程序员

学习SQL【1】-搭建SQL的学习环境

最近我在学习SQL,现在就开始记录我的学习过程吧,加油!如果你也想学SQL,希望我的学习记录能对你有所帮助。 PostgreSQL是对象关系型数据库管理系统...

3496
来自专栏蓝天

MySQL-5.7.10主主同步的安装和配置

这里安装的是最新的MySQL 5.7.10(5.7.12、5.7.13(后续更新版本可能类似)有些区别,安装过程中遇到错误可搜索下本文,也许可以找到解决办法...

1564
来自专栏Laoqi's Linux运维专列

MySQL调优

4519
来自专栏你不就像风一样

CentOS 6.5下RPM方式(重新)安装MySQL 5.7.21从头到尾篇

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables ...

972
来自专栏张善友的专栏

SQLite 预写式日志

      SQLite在3.7.0版本引入了WAL (Write-Ahead-Logging),WAL的全称是Write Ahead Logging,它是很多...

2319
来自专栏LIN_ZONE

远程连接ubuntu mysql出现2003错误 cant connect to mysql(转载)

2.打开my.cnf文件,找到 bind-address = 127.0.0.1 在前面加上#注释掉,如下: #bind-address = 127.0.0....

2292
来自专栏csxiaoyao

mysql 配置总结( linux & macos )

40411
来自专栏散尽浮华

Oracle日常运维操作总结-数据库的启动和关闭

下面是工作中对Oracle日常管理操作的一些总结,都是一些基本的oracle操作和SQL语句写法,在此梳理成手册,希望能帮助到初学者(如有梳理不准确之处,希望指...

3505
来自专栏L宝宝聊IT

Mysql备份与还原——xtrabackup

上次我们介绍了采用逻辑备份mysqldump 备份方式,其最大的缺陷就是备份和恢复速度都慢,但如果数据库非常大,那再使用 mysqldump 备份就不太适...

4143

扫码关注云+社区

领取腾讯云代金券