BC++Builder3.0中各种资源的利用
作者
李进
工作单位
烟台南大街建行科技部
在编写程序的过程中,经常要用到各种资源。比如说,想给自己的程序换个自己的图标,使用一些活泼的光标来增加趣味性,播放一些声音和动画文件,或者使用别人写好的程序来实现某个功能。我们往往希望将这些资源直接放到EXE文件中以形成一个单独的可执行文件,这就存在一个如何在运行时访问和使用这些资源的问题。
----在编译期间,这就要用到一种文件,以.rc结尾的资源定义文件。
----一:RC文件
---- rc文件是个文本文件,它的格式很简单,按如下格式定义:
----资源标识符资源类型资源的路径
----以下的rc文件定义了一个声音资源,两个光标资源,三个图标资源和一个exe文件资源。
src1.rc:
S1 WAV wav1.Wav
C1 CURSOR cursor1.cur
C2 CURSOR cursor2.cur
I1 ICON icone1.ico
I2 ICON icone2.ico
I3 ICON icone3.ico
unzip EXEFILE pkunzip.exe
----你可以将写好的rc文件加到你
的project(项目)中。你也可以手工将其编译为供程序直接使用的二进制资源文件(.res文件)。在BCB3.0中,可以使用命令行:brcc32 src1.rc src1.res。
----二:资源的使用
----下面,按照使用的简繁程度,依次说明各类资源的使用方法。需要说明的是,下面讲述的使用方法,在别的编译环境下(BC, VC等)也是一样的。
---- 1:建立一个新的项目
----启动BCB3.0,选FILE- >new- >Application 建立一个新的项目。
----在project- >Add to Project中,加入写好的src1.rc文件。当然,那些声音、光标、图标文件都应该存在。
----这时,我们有了一个空的窗体(Form)。
---- 2:能够利用windows API函数直接访问的资源有:
图标 LoadIcon()
光标 LoadCursor()
加速表 LoadAccelerators()
位图 LoadBitmap()
菜单 LoadMenu()
字符串 LoadString()
----前五个API函数使用方法都一样,带两个参数。
----第一个参数指明资源的存放地,第二个参数为rc文件中资源的标识。
----字符串LoadString除这两个参数外,还有两个参数,指明字符串缓冲区的地址和大小。
----下面的一小段程序示范了图标和光标的使用。
----在Form上放置一个按纽,在其OnClick事件中加入以下代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//将光标形状改为自己定义的:
Screen- >Cursors[crDefault] = LoadCursor( HInstance, "C1");
//将图标改为自己定义的:
Icon = new TIcon() ;
Icon- >Handle = LoadIcon(HInstance,"I1");
Application- >Icon = Icon ;
}
----其中的HInstance指示资源所在地为执行文件。编译执行后,点击该按纽,光标和图标都会换成新的。
---- 3:能够通过windows API使用的资源
----对于声音、动画等文件,可以使用windows API函数播放。但是不象上面几种资源,需要遵循一定的步骤。如下所示,依次调用FindResource, LoadResource, LockResource函数,来播放一个Wav声音文件。
----(当然,独立的声音文件可以在运行时直接播放。我们这里讨论的是将wav文件编译进EXE文件的情况)
----在Form上放置第二个按纽,在其OnClick事件中加入以下代码:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//定义资源块
char *wav_handle ;
//装入Wav文件
HRSRC h = FindResource(HInstance,"S1","WAV");
HGLOBAL h1 = LoadResource(HInstance, h);
wav_handle = (char *)LockResource(h1);
//播放Wav文件。由于Wav文件装载在内存中,
sndPlaySound函数要用SND_MEMORY参数
sndPlaySound(wav_handle, SND_MEMORY | SND_SYNC);
}
----编译执行后,点击该按纽,会播放一次声音。
----对于动画等文件,使用方式类似Wav文件。(BCB提供了一个TAnimate控件,可以播放无声的Avi文件)
---- 4:不能直接通过windows API使用的资源
----此种资源不能够由windows API直接访问和执行。但是,我们可以用一种变通的方法来使用它。
----下面示范如何使用pkunzip.exe,思路如下:程序运行时,将pkunzip.exe从EXE文件中分离出来,放在临时目录下,用ShellExecute()执行它。
----在FORM上放置第三个按纽,在放置两个Edit ,用来输入pkunzip.exe的参数。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char exefile[100], tmppath[100] ;
unsigned long ret ;
//检查pkunzip.exe是否已经存在
GetTempPath( 100, tmppath ) ;
strcpy( exefile ,(AnsiString(tmppath)+
AnsiString("\\pkunzip.exe") ).c_str() ) ;
ret = GetFileAttributes( exefile ) ;
if( ret == 0xffffffff )
{ //不存在,则分离出pkunzip.exe
TResourceStream &rs = *new TResourceStream( (int)HInstance, AnsiString("unzip"),"EXEFILE" ) ;
rs.SaveToFile( AnsiString(exefile) ) ;
delete &rs ;
}
//执行pkunzip.exe
// Edit1- >Text和Edit2- >Text分别为运行时输入的zip文件名和目标文件目录。
ShellExecute(HInstance,"open", exefile, AnsiString("-d ") + Edit1- >Text + " " + Edit2- >Text).c_str(), tmppath, SW_HIDE ) ;
Application- >MessageBox("解压缩完成", "OK", IDOK ) ;
}
----此种方法实际上是用时间和空间来换取便利性,有一定的参考价值。例如,DynaDoc的免费分发版本,就是将真正的执行程序压缩后放在一个有解压缩功能的“壳”中。运行时,首先是“壳”运行起来,将真正的执行程序解压缩到临时目录,然后去运行它。如果你的程序含有大量的BMP,WAV文件,不妨一试,能让你的程序减肥不少。
分享到:
相关推荐
C++信号处理SP++3.0及使用说明 由于原先的sp++使用时会报错,说std里不包含min、max 把原来的usingdeclare.h中 /* using std::min; using std::max;*/屏蔽掉 在主cpp离添加 #include <algorithm>
在Borland C++ Builder 3.0中,开发人员可以利用其集成的编译器,该编译器基于Borland的Turbo C++,并针对Windows API进行了优化。这个版本引入了许多新特性,包括对Microsoft Visual C++兼容性的增强,使得代码迁移...
在压缩包文件"tc"中,可能包含了TC++3.0的安装程序、文档、示例代码以及其他相关资源。用户可以通过解压这个文件来安装和使用TC++3.0。需要注意的是,由于这款软件相对较老,可能不支持现代的操作系统或编译标准,...
仅供学习,侵权删除,c+++builder+2010+破解c+++builder+2010+破解c+++builder+2010+破解c+++builder+2010+破解
8. **学习资源**:谭浩强的教程通常会详细介绍如何使用TC++ V3.0来编写、编译和运行C/C++程序,包括基础语法、控制结构、函数、指针等主题。配合编译器的使用,可以让学习过程更为直观和高效。 9. **兼容性与版本**...
7. **网络编程**:介绍如何在C++ Builder中实现网络通信,包括套接字编程、HTTP请求等。 8. **图形与多媒体编程**:教授如何利用API或库来处理图像、音频、视频等多媒体元素,增强应用程序的功能和用户体验。 9. *...
BC++Builder6强调快速应用程序开发,其编译器能快速生成可执行文件,且支持C++Builder编译器优化,使得代码运行更高效。同时,VCL组件的事件驱动编程模型简化了程序逻辑,使得开发者可以专注于业务逻辑而非底层实现...
Skin++ For C++ Builder目前全面支持C++ Builder 4、C++ Builder 5、C++ Builder 6、C++ Builder 2006。Skin++对以上C++ Builder 中所有的控件做了全面的支持。
仅供学习,侵权删除,C++Builder+6.0keygenC++Builder+6.0keygenC++Builder+6.0keygen
在CocosBuilder中,开发者可以使用内置的CSS样式表来控制UI元素的外观,这与HTML5开发中的CSS类似,意味着CocosBuilder也支持创建跨平台的HTML5项目。通过这种方式,开发者可以实现统一的设计风格,并轻松地将设计...
在C++ Builder中,通常需要创建一个Graphics对象,传入窗体的HDC(设备描述符),然后通过这个Graphics对象调用各种绘图函数。在绘制完成后,记得释放相关资源以避免内存泄漏。 最后,GDI+提供了事件驱动的绘图机制...
在标题提到的"用skin++3.0控制的超级精美界面皮肤"中,我们可以理解这是使用Skin++ 3.0版本开发的一组界面皮肤,这些皮肤设计精美,适用于PowerBuilder(PB)编写的程序,并且在Windows操作系统环境下能够流畅运行。...
2. **C++兼容性**:TC++3.0支持C++语言的全部特性,包括类、对象、继承、多态、模板、异常处理等,使得用户可以利用面向对象的编程思想进行开发。 3. **预编译头文件**:TC++3.0支持预编译头文件(如`#include <预...
在C++Builder中,DFM文件记录了界面上所有控件的位置、大小、属性等信息。 5. **头文件**: "SPY.h" 可能是包含类定义、函数声明和其他预编译信息的头文件。在C++中,头文件常用来实现代码的模块化和重用。 6. **...
总结来说,Borland C++ v2.0和TC++ 3.0是两款在特定时期内极具影响力的C++编译器,它们在Lvswin3.1操作系统的开发过程中扮演了重要角色。通过这些编译器,开发者能够理解和学习到如何构建和优化复杂的操作系统代码,...
SP++ (Signal Processing in C++) 是一个关于信号处理与数值计算的开源 ...序库,由西安交通大学张明老师编写,该库提供了信号处理与数值计算中常用算法的 C++实现,每每看到前辈的编写说明和心路体会,都觉万分感动。
书中可能包含了如何使用IDE创建项目、编写代码、调试程序、使用组件库进行界面设计、与数据库交互的步骤,以及如何利用C++Builder5和C++Builder6的特性来提高开发效率。 对于初学者或希望深入理解C++Builder5和C++...
9. **教学资源**:由于其易用性和广泛的教学资源,Turbo C++ 3.0成为了很多初学者入门C++的首选工具,很多计算机科学教育机构都曾采用它作为教学软件。 在文件列表中,"Turbo CC++ 3.0.exe"很可能就是Turbo C++ 3.0...
VCL 是 Delphi 和 C++Builder 开发环境中广泛使用的图形用户界面库,它提供了丰富的控件和组件,使开发者能够快速构建美观的应用程序。通过 VCL Skin Builder,用户可以为这些控件设计个性化的外观,提升应用程序的...