VC++ 导入自定义资源_Howard_Liu1314的博客-程序员宅基地

在VC中使用自定义资源,FindResource,LoadResource

一、添加

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

二、使用

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

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

2. HRSRC FindResource(

3. HMODULE hModule, //包含所需资源的模块句柄,如果是程序本身,可以置为NULL

4. LPCTSTR lpName, //可以是资源名称或资源ID

5. LPCTSTR lpType //资源类型,在这里也就是我们自己指定的资源类型

6. );

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

8. HGLOBAL LoadResource(

9. HMODULE hModule, //模块句柄,同上

10. HRSRC hResInfo //需要加载的资源句柄,这里也就是FindResource的返回值

11. );

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

13. LPVOID LockResource(

14. HGLOBAL hResData //指向内存中要锁定的资源数据块,这里也就是LoadResource的返回值

15. );

另外我们还需要用SizeofResource来确定资源的尺寸,我们在操作资源时要用到它。在资源使用完毕后我们不需要使用 UnlockResource和FreeResource来手动地释放资源,因为它们都是16位Windows遗留下来的,在Win32中,在使用完毕后系统会自动回收。它们的使用很简单,大致上是这个样子的:

BOOL UseCustomResource()

{

//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可

HRSRC hRsrc = Findresource(null, MAKEINTRESOURCE(ITEMID), TEXT("MyType"));

if (NULL == hRsrc)

return FALSE;

//获取资源的大小

DWORD dwSize = SizeofResource(NULL, hRsrc);

if (0 == dwSize)

return FALSE;

//加载资源

HGLOBAL hGlobal = LoadResource(NULL, hRsrc);

if (NULL == hGlobal)

return FALSE;

//锁定资源

LPVOID pBuffer = LockResource(hGlobal);

if (NULL == pBuffer)

return FALSE;

//我们用刚才得到的pBuffer和dwSize来做一些需要的事情。可以直接在内存中使

//用,也可以写入到硬盘文件。这里我们简单的写入到硬盘文件,如果我们的自定

//义资源是作为嵌入DLL来应用,情况可能要复杂一些。

BOOL bRt = FALSE;

FILE* fp = _tfopen(_T("demo.exe"), _T("wb"));

if (fp != NULL)

{

if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))

bRt = TRUE;

fclose(fp);

}


/*

CFile file(_T("123.exe"), CFile::typeBinary|CFile::modeCreate|CFile::modeReadWrite);

file.Write(lp, dwLen);

file.Close();

*/

//UnlockResource(hGlobal);

//FreeResource(hGlobal);

return bRt;


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Howard_Liu1314/article/details/20736981

智能推荐

OpenCV计算机视觉实战 - 图像特征(Harris+Sift)检测 和 全景图像拼接_松松要松松的博客-程序员宅基地

################################################################# 【纸上得来终觉浅,绝知此事要躬行】 B站视频 新课件:https://pan.baidu.com/s/1frWHqCVGR2VTn5QBtW4lPA 提...

objective-c 中数据类型之五 数值类(NSNumber及NSNumberFormatter)_stlwtr的博客-程序员宅基地

聊聊NSNumber, NSNumber可以封装c中基本数据类型 char,int,long,float,BOOL,NSInteger,CGFloat等。

stl vector 函数_vector :: max_size()函数,以及C ++ STL中的示例_cumubi7552的博客-程序员宅基地

stl vector 函数 C ++ vector :: max_size()函数 (C++ vector::max_size() function)vector::max_size() is a library function of "vector" header, it is used to get the maximum size of a vector, it returns the ...

Android学习--04(打地鼠小游戏App源码+提示框Toast+提示窗口Dialog+菜单Menu+下拉框Spinner)__esther_的博客-程序员宅基地

打地鼠小游戏1Toast 提示Android的提示机制1.1Toast提示1.1.1 使用Toast步骤1.1.2 Toast重要方法1.1.3 Toast操作演示1.1.4 示例源码1.1.5 在类文件创建控件2 Dialog对话框2.1 AlertDialog 的构建2.1.1 AlertDialog.Builder 重要方法3 Menu菜单4 Spinner下拉列表框5 打地鼠小游戏的设计与实现1Toast 提示Android的提示机制1.1Toast提示Toast(消息提示框)是轻量级信息

大数据开发套件—数据集成常见问题_chuhan3075的博客-程序员宅基地

我们在进行大数据开发过程中,会遇到各种问题,本文将定期收集整理一些在使用阿里云数加大数据开发套件过程中遇到的常见问题,供大家参考~ Q: 配置数据同步任务,在选择数据源时,出现下图中的错误,该怎么办? A: 建议您刷新页面,清空缓存,重新登录。 Q:数据同步时,如何进行...

Android中的JSON解析方式:json; Gson ; Fastjson_qi_ruihua的博客-程序员宅基地

本文主要介绍Json数据的解析----a,json数据的介绍----b,json数据的解析----c,gson数据的解析,谷歌公司的一种格式----d,fastjson数据的解析,阿里巴巴的一种格式通过本文的学习能掌握json数据格式的解析,为以后json格式数据的解析做到熟练于心。Json的全称:JavaScript Object Notation

随便推点

sqlserver故障转移集群和alwayson的区别_集群和分布式概述_weixin_39983912的博客-程序员宅基地

1.1什么是集群1.1.1集群概念集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。1.1.2...

pdfFactory Pro2022最新下载虚拟打印机_CoCo玛奇朵的博客-程序员宅基地_pdffactory pro名称和序列号

pdfFactory Pro(虚拟打印机)是一个无须 Acrobat 创建 Adobe PDF 文件的打印机驱动程序。pdffactory pro虚拟打印机提供了比其他程序提供得更简单、更有效率和更少的花费的创建 PDF 文件的解决方案。用于需要安全的 PDF(法律文档、公司信息等)和其他高级功能的用户。pdfFactory 支持从所有应用程序轻松、可靠地创建 PDF 文件。 支持将单页或两页的文档,直接打印为PDF文件,十分方便,并且比将单独的 PDF 文件导入 Acrobat 有时会产生意外的问

QT 添加背景图像并图像自适应窗口大小_Chasing_Chasing的博客-程序员宅基地_qt背景图片自适应大小

时间:2019-04-04背景:这段时间由于项目比较闲,所以前来开发一个QT工具供以后使用,由于个人有“完美追求”因此偏要给工具加上一个漂亮的图像背景。问题:参考网上许多关于QPalette+QPixmap 或者 用stylesheet实现添加背景图像的,但却未能找到能够图像自适应窗口大小的方式,为此特地拿出来后面找到的QPalette +QImage方式实现添加背景图像,又能自适应大小...

python[对多维数组排序]_Gpwner的博客-程序员宅基地

有四个点,每一个点有x,y坐标,如何根据x坐标或者y坐标进行排序?以下是解决办法:if __name__ == '__main__': alist = [[0, 10], [5, 6], [2, 7], [3, 8], [1, 12]] alist.sort() print('按照X排序:{}'.format(alist)) alist.sort(key=lambd

程序员用学位证吗_如何成为没有学位的程序员?_culing2941的博客-程序员宅基地

程序员用学位证吗Hello there folks, today we are going to shed some light on how one can become a programmer without a degree. By the word ‘programmer’, one can convey three different meanings, first, someone ...

mysql:为查询结果增加一个自增列_zhenglit的博客-程序员宅基地_mysql 查询生成自增列

两句查完:set @rownum=0;select (@rownum:[email protected]+1),colname from [tablename or (subquery) a];一句查完:select @rownum:[email protected]+1,colnum from (select @rownum:=0) a,[tablename or (subquery) b];