最近写一个可以将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
分享到:
相关推荐
VC中实现定制Excel输出,可以合并单元格,设置单元格格式,字体等,可以执行模板中的宏,输出符合的报表图。
VC界面编程;可以从中学习到如何使用VC中位图等资源创建漂亮、美观的VC界面。
释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc 释放资源vc vv
VC入门以来的小结,从变量元素到多线程编程。配合一些编程技巧。大家都是好朋友,多多分享!
用VC中的树形控件实现的Windows资源管理器
VC调用DLL中资源 文档+代码 很详细 很通用
VC开发资源库.rar
vc实现资源管理器(vc9工程) 快速建立资源管理器 和基本功能
在VC项目中使用自定义资源 的 Code
VC插件-资源排序,对于一个大的VC工程来说,资源标号常常会有重复,有了这个插件,修改起来非常方便!
Vc资源管理器,功能强大Vc资源管理器,功能强大Vc资源管理器,功能强大Vc资源管理器,功能强大
VC学习内幕,学习笔记,学习VC的好帮手
VC释放资源源码 运行exe~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
随着VC工程越来越大,资源编辑越来越频繁,resource里的资源ID号难免混乱,或者重复,很容易造成问题,但又非常不好解决。这个小工具提供了可视化的界面和多种整理方式,可以又快又好的把重复的资源剔除,对资源Id号...
VC资源文件释放,将图片,文件,密钥之类的各种数据保存到资源中,并运行时释放
人力资源管理系统采用VC、SQL 2005 设计,方法独特,效果显著。人力资源管理系统采用VC、SQL 2005 设计,方法独特,效果显著。
利用VC中的Treeview和Listview,做一个自己的资源管理器,左侧的树状目录可以关闭,当点击一个文件夹时右侧的Listview中会显示文件夹的内容。尽量模仿windows的资源管理器的功能,比如左侧文件夹图标的变化和右侧...
对VC的资源ID(resource.h)进行排序,消除重复的ID值。
lua (vc环境)学习笔记(学习代码) lua (vc环境)学习笔记(学习代码) lua (vc环境)学习笔记(学习代码)
VC释放EXE资源文件Demo,实现添加一个EXE文件到工程中,然后在释放出来,完好无损