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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值