在VC项目中使用自定义资源

一、前言

在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。

默认的皮肤压缩包或语言包。一些支持换肤的软件特别是一些媒体播放器常常有自定义的皮肤文件(你可以尝试将Media Player或千千静听等软件的Skins目录下的文件的扩展名改为.zip,然后使用WinZip打开看一下),但为了防止Skin文件丢失导致软件无法显示,他们常常会在EXE文件中内置一套Skin作为默认的皮肤文件。同样,一些支持多语言的EXE文件中存在默认语言包也是这个道理(当然也可以使用"String Table"资源类型);

做为一些病毒/木马程序的寄生方式。如果不小心执行了带有病毒/木马的程序,它们会在你运行时释放出病毒/木马文件。当然许多病毒是将自身写入PE文件头来实现;

合并EXE与它所需要的DLL文件。出于某些原因程序作者有时可能需要将DLL文件嵌入到可执行的EXE文件中,这可以通过使用自定义资源来实现;

其它需要在程序中播放一个AVI动画等等,都可以通过将二进制的数据文件作为自定义资源加入到可执行文件中来实现;

二、添加

添加资源时选择自定义,IDE会为你生成一个新的二进制资源,然后你就可以将你已经存在的二进制文件作为自定义的资源类型导入到项目中来了。

三、使用

要使用自定义资源,我们可能要用到的几个API函数有FindResource、LoadResource和LockResource等,这里每一个函数的返回值分别作为下一个函数的参数,我来简要介绍一下。

FindResource用来在一个指定的模块中定位所指定的资源:

HRSRC FindResource(
HMODULE hModule,    //包含所需资源的模块句柄,如果是程序本身,可以置为NULL
LPCTSTR lpName,    //可以是资源名称或资源ID
LPCTSTR lpType    //资源类型,在这里也就是我们自己指定的资源类型
);

LoadResource用来将所指定的资源加载到内存当中;

HGLOBAL LoadResource(
HMODULE hModule,    //模块句柄,同上
HRSRC hResInfo    //需要加载的资源句柄,这里也就是FindResource的返回值
);

LockResource用来锁定内存中的资源数据块,它的返回值也就是我们要使用的直系指向资源数据的内存指针;

LPVOID LockResource(
HGLOBAL hResData    //指向内存中要锁定的资源数据块,这里也就是LoadResource的返回值
);

时间: 2024-08-04 14:02:52

在VC项目中使用自定义资源的相关文章

调用自定义资源-新手求教,请问如何调用resx中的自定义资源,没有金币,谢谢大家

问题描述 新手求教,请问如何调用resx中的自定义资源,没有金币,谢谢大家 如图,我往资源文件FP.zh-Hans.resx里边加了一个key叫"zzz",值是"啦啦啦",请问代码该如何掉用之,请大侠指点一二 解决方案 ResourceManager rm = new ResourceManager("MissionPlanner.GCSViews.FlightPlanner.zh-Hans.resx", System.Reflection.As

VC 项目中可以使用的路径宏

原文地址:http://blog.csdn.net/collin1211/article/details/2483316 VC 项目中可以使用的路径宏: 宏 说明 $(RemoteMachine) 设置为"调试"属性页上"远程计算机"属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添加到项目中. $(ConfigurationName) 当前项目配置的名称(例如"Debug&quo

在项目中可以使用自定义注解处理什么问题?

问题描述 在项目中可以使用自定义注解处理什么问题?有什么业务或功能可以使用自定义注解来处理?比如权限希望大家帮忙帮忙告诉一下!谢谢了 解决方案 解决方案二:没头没尾解决方案三:我的意思是,在开发项目过程中我们可以自定义注解来处理什么问题?权限控制我知道可以,还有什么功能或业务可以通过自定义注解来处理,也就是高手们在开发过程中使用过自定义注解没?使用了的话,是什么功能和业务,大家帮帮忙啊!!!!解决方案四:自定义注解可以处理权限?解决方案五:引用3楼qkniit的回复: 自定义注解可以处理权限?

【转】VC++项目中stdafx.h的作用

        stdafx全称Standard Application Fram Extend.没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行.         Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作.由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下

在LIUNX服务器上找出web项目中占用cpu资源最多的线程的排查方法

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 第一步:登陆到web服务所在的liunx服务器,利用top命令获取java的cpu使用率 第二步: 如上图所示,java的进程id为'3260',接下来用top命令单独对这个进程中的所有线程作监视:top -p 3260 -H 第三步: 如上图所示,linux下,所有的

在配置文件(.settings、.config)中存储自定义对象

原文:在配置文件(.settings..config)中存储自定义对象 引言 我前面曾写过一篇<使用配置文件(.settings..config)存储应用程序配置>,我在其中指出"settings无法实现对一些复杂类型及自定义类型的支持". 而今天我发现其实它是支持自定义类型的,仅仅是不能支持本项目中的自定义类型,可以支持引用的项目或类库的自定义类型.至于为什么不支持本项目中的自定义类型,我也不得而知,猜想可能是怕加载时造成冲突吧.   范例 我们来做一个使用自定义类型的配

vc++编程问题-VC中自定义资源的读取

问题描述 VC中自定义资源的读取 自定义资源LOADRESOURCE之后,返回的是HGLOBAL 类型,因为我要分析这个文件,提取有用信息,所以一直用fread fseek fopen 操作,但是类型不符,fread的参数都是FILE类型的,这该怎么办?

vc.net中,在资源里,有个“REGISTRY”项,不知道是什么?

问题描述 这是以前员工留下的代码:vc.net中,在资源里,有个"REGISTRY"项,不知道是什么?另,没有Dialog项,但实际程序是有对话框的. 解决方案 解决方案二:dddddddddddddddddddddddddddddddddddd解决方案三:查看里面是内容...是不是存放的注册表相关信息.解决方案四:都是是二进制的,看不懂啊.解决方案五:REGISTRY类型是他自定义的,这里面放的资源自然与REGISTRY有关,所以猜测也就是注册表相关的信息.解决方案六:应该是对注册表

《Unity开发实战》——1.9节导入自定义包到项目中

1.9 导入自定义包到项目中 各种资源都可以放在自定义的Unity包里,这在开发项目时非常有用. 1.9.1 准备工作 如题所述,需要准备好一个自定义包用于导入,可以在示例代码文件夹中找到一个名为 "0423_01_09-11"的包用于测试. 1.9.2 操作步骤 请按下面的步骤导入自定义包: 1)打开Unity编辑器中的Assets菜单. 2)进入Import Package子菜单,选择Custom Package(自定义包)选项. 3)浏览硬盘上的包,点击Open(打开)按钮. 4