`
yangshen998
  • 浏览: 1244649 次
文章分类
社区版块
存档分类
最新评论

VC中"资源定制"学习手记

 
阅读更多
最近写一个可以将console下的控制台程序输出重定向到VC中EDIT控件的小程序

从而达到控制台程序的GUI化,而这之中很重要的的一个环节就是将源程序与我们做的GUI程序编译到一快,这使用到VC中资源定制的功能。

资源即数据,它们被储在程序的EXE文件中,但是它们并非驻留在程序的数据区域中也就是说资源不能通过程序源代码中定义的变量来直接访问,要使用资源就必须使用windows提供的API函数:

FineResource:查找一个资源。我们是把相关要生成的文件载入,就是用这个函数来确定其资源的位置。

SizeofResource:获得资源的尺寸。

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的返回值

);

另外我们还需要用SizeofResource来确定资源的尺寸,我们在操作资源时要用到它。

为了方便说明我们来写个基于对话框的小程序,并将ping.exe这个程序以资源的方式加载进去,运行时会在C:/目录下生成一个ping.exe

整个思路如下:

1建立一个对话框程序MAIN

2将ping.exe作为MAIN的资源一同编译

3查找,加载,锁定资源数据

4将数据生成为文件

第一步

建立一个新的对话框项目

第二步

将面板切换到ResourceView面板 右击 最上面的resources* 文件夹图标

选择 Insert 这时会弹出如下插入资源对话框

选择M导入弹出导入资源对话框

导入资源文件类型选所有文件

最后选要加载的文件这里是ping.exe

之后会弹出定制资源类型对话框 如图

类型名可以随意填写这里填PING

插入后编译程序时ping.exe将做为对话框的资源编译进去

第三步

成功加载后 使用时需要释放出来在来例中可以使用如下代码实现

HRSRC hr=FindResource(0,MAKEINTRESOURCE(IDR_PING),"PING");

if(hr==NULL)

MessageBox("hr error");

dwSize=SizeofResource(NULL,hr);

HGLOBAL hg=LoadResource(NULL,hr);

if(hg==NULL)

MessageBox("hg error");

LPSTR lp=(LPSTR)LockResource(hg);

if(lp==NULL)

MessageBox("lp error");

第四步

当完成第三步后 就是生成ping.exe文件了

可通过如下代码实现

DWORD dwSize, dwWritten;

HANDLE hFile;

hFile =

CreateFile("c://ping.exe",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);

if(hFile == NULL)

MessageBox("create file error");

WriteFile(hFile,(LPCVOID)LockResource(hg),dwSize,&dwWritten,NULL);

CloseHandle(hFile);

这样就会在C:/目录下还原ping.exe

总结

资源的定制的关键还是在于查找,加载,锁定资源数据........

与本文相关代码 在VC6.0下面编译无误

pings.rar
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics