C++Builder资料库.pdf
《C++Builder资料库.pdf》由会员分享,可在线阅读,更多相关《C++Builder资料库.pdf(115页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.怎样在C+Build er中创建使用DLL2.用C+Bulid er在 WIN.INI中保存信息3.如何在C+Build er中检测硬件4.C+Build er如何响应消息及自定义消息5,利用C+Build er开发动画DLL6.用C+Build er 3 制作屏幕保护程序7.TCP/IP头格式8.UDP9.判断wind ows的 Desktop及其它目录10用 C+Build er创建数字签名11用 Enter键控制焦点切换的方法12.拦截 Wind ows消 息13.使用 CommaText14.程序开始时先显示信息框15.怎样获取程序的命令行参数?16.如何监视剪贴板17.如何使用O
2、nld le事件18.用C+Build er编写串行异步通信程序19.C+BUILDER非可视组件的消息处理技巧20.用C+Build er建立数据库VCL使用经验21.用C+Build er创建基于Internet的点对点Chat22.用C+Build er获取应用程序图标23.BIG5到 G B的转换技术24.C+BUILDER让你的任务栏图标动起来25.TFORM26.用BCB在 wind ows桌面创建快捷方式27.读磁片磁区28.1/0 端口读写的实现29.检测鼠标位置30.令 W in32应用程序跳入系统零层31.如何取得Memo的行和列32.使用 Sockets33.Wind o
3、ws95/98下怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中?34.怎样隐藏应用程序的任务条图标35.编写自己的Ping.exe程序36.用 C+Build er 在 WINNT 下编制一个 Service37.如何在C+BUILDER中自动关闭WINDOWS屏保38.显示/隐藏任务栏图标39.信箱监视程序4O.C+Build ing 制作闹钟41.拨号上网IP 地址的检知42.用 C+Build er 编写 Tray 程序43.怎样用代码来最小化或恢复程序44.制作主窗口显示前的版权窗口45.判断是否己经联到internet46.获取登陆用户名47.隐臧桌面图标48.程序启动
4、时运行49.控制面板的调用50.模拟键盘按键51.让标题栏闪烁52.启动屏幕保护53.年月日星期的取法54.键盘事件55.隐藏任务栏56.禁止关机57.怎样以最小化方式启动程序58.在Memo中增加一 行 后,如何使最后一行能显不59.设置壁纸方法怎样在C+Build er中创建使用DLL自从C+Build er从去年浪漫情人节上市以来,吸引了大量的Delphi、VC、Vb的程序员到它的怀抱,大量的C、C+程序员感叹道:总算有了 C 的可视化开发工具,对我也是一样,从 BC、Delphi 到 C+Build er。动态链接库(DLL)是 Wind ows编程常遇到的编程方法,下面我就介绍一下在
5、BCB(C+Build er下简称B C B)中如何创建使用DLL和一些技巧。一、创建:使用BCB FilelNEW建立一个新的DLL工程,并保存好文件B C B,生成个 DLL的程序框架。1.DHEntryPoint函数为一个入口方法,如果使用者在DLL被系统初始化或者注销时被调用,用来写入对DLL的初始化程序和卸载程序;参数:hinst用来指示DLL的基地址;reason用来指示DLL的调用方式,用于区别多线程单线程对DLL的调用、创建、卸载DLL;2.在程序中加入自己所要创建的DLL过程、函数;3.用 d llimport 描述出口;例程序如下:#includ e#pragma hd r
6、stopextern 擎?_d eclspec(d llexport)int test();int WIN API DllEntryPoi nt(HINSTAN CE hinst,unsigned long reason,void *)(return 1;)int test()(return 3;)注意:动态链接库中调用过程、函数时有不同的C A LL方式 _cd ecl、_pascal,_ fastcall _ std call,BCB中默认的方式为_cd ecl(可不写),如果考虑兼容性可用时_std call声明方法为:extern 挈?_d eci spec(d l lexport)i
7、nt _ std call test();对于其中过程、函数也改为:int_ std call test()二、使用DLL在 BCB中使用DLL有两种方法:1.用静态调用法首先需要在BCB的项目中加入输入接口库(import library),打开工程项目,使 用 BCBViewlProject Manager打开项目列表,向项目中加入接口库(*Jib)。其次在头文件中加入接口声明。例程序如下:/d efine in includ e fileextern 掣?_d eclspec(d llimport)int _ cd ecl test();/use function in main pro
8、gramint I;I=test();注意:(D动态链接库调用过程、函数时CALL方式与创建时方式一样不写为_ c d e c l,其它需要声明。BCB创建的DLL有对应的输入接口库(import library),如只有DLL而无库时,可用BCB的 implib 工具产生:implib xxx.lib xxx.d ll;另外可用:tlib xxx.lib,xxx.lst 产生 DLL 的内部函数列表,许多Wind ows的未公开技术就是用这种方法发现的。2.动态调用法动态调用法要用Wind ows A P I中的Load LibraryO和 GetProcAd d ress。来调入DLL库,
9、指出库中函数位置,这种方法较常见。例程序如下:H1NSTANCE d d;int _std call(*d d d)(void);d d=Load Library(I xx.d ll?;d d d=GetProcAd d ress(d d,est?;C 叩 tion=InlToStr(d d d();FreeLibrary(d d);三、注意:创建DLL时编译链接时注意设置Project OptionsoPackages 标签:去除 Build er with runtime packages 检查框。Linker标签:去除Use d ynamic RTL检查框。否则创建的 DLL 需要 Ru
10、ntime packages or Runtime libraryo用 C+Bulid er在 WIN.INI中保存信息现在许多软件把程序中需要的数据保存在注册表中,这样当用户装的软件越来越多时,致使注册表越来越庞大,容易使系统出错。当然,微软也建议在注册表中保存数据,但当我们需要保存的数据不多时完全可以把数据保存在WIN.INI中,这样可以很方便地维护,实现方法相对来说比较简单。下面我以Borland C+Build er为例来说说如何实现。原理其实很简单,只需调用API的 WriteProfileString和 GetProfilelnt函数就可以了。这两 个 函 数 的 原 型 是:BO
11、OL WriteProfi leStri ng(LPCTSTR lpAppName,LPCTSTRlpKeyName,LPCTSTR IpString);UINT GetProfileInt(LPCTSTR IpAppName,LPCTSTR IpKeyNameJNT nDefault);其 中 IpAppName指 在 WIN.INI中段的名字,即用口括起来的字符串,IpKeyName指在这个段中每一个项目的名字,IpString指这个项目的值,即“=”后的数,nDefault为当GetProfilelnt没有找到IpAppName和 IpKeyName时返回的值,即缺省值,前者返回为布尔值
12、(true或 false),后者返回为无符号整形值。当在WriteProfileString函数中IpKeyName为空(NULL)时,则清除这个段的全部内容,IpString为空时,则清除这一项目的内容,即这一行将清除掉。下面举例子来说明这两个函数的用法。新建一个应用程序,在 Form l上放两个Ed it和三个Button,其中Ed it的Text为空,三个Button的 Caption分别为“添加”、“查看”、“清除”。双 击“添加”按钮加入下面代码:WriteProfileString(例子程序,项目,Ed itl-Text.c_str();双 击“查看”按钮加入如下代码:unsign
13、ed int Temp;Temp=GetProfileInt(例子程序,项目,100);Ed it2-*Text=IntToStr(Temp);双 击“清除”按钮加入如下代码:WriteProfileString(“例子程序”,NULL,NULL);然后按F9键运行程序。下来可以检验一下程序的正确性。在 E d itl中输入数字,如“3265”,按“添加”按钮,这时运行“sysed it”来 查 看“WIN.INI”文件的最后面,可以看到加入了如下内容:例子程序项目=3265其 中“口”和“=”是函数自动加上的。按 下“查看”按钮,在 Ed it2中出现“3265”,当按下“清除”按钮可清除添
14、加的部分。经过查看可知程序已达到预期的目的。喜爱编程的朋友可以把上述方法应用到自己的程序中去,来达到保存数据信息的作用。当确实要把信息保存到注册表中,可以在C+Build er中定义一个TRegistry类的对象来进行相关的操作,或者直接调用Wind ows的 API函数,具体如何编程大家可以参阅相关资料或者同我联系。如何在C+Build er中检测硬件在我们编写的程序中常常要和硬件打交道,那么如何在程序中确定系统中是否有该设备,它的运行状态又是怎样的呢?对于初学者来说,这个问题常常不好解决,其实只需简单地利用几个API函数,硬件的问题并不神秘。下面就让我们一起看看在C+Build er中是如
15、何检测硬件的。1.检测CPU的型号先让我们从最简单的做起,看一看自己的CPU型号。首先,在 C+Build er中画出图 1所示的窗体,在下面的儿个例子中我们将一直使用这个窗体作示范,它包括一个用来激活测试的Button和一个用来显示结果的M emoo我们可以用GetSystemlnfo这 个 A PI获得CPU的型号。将下列代码添加到Button的 Click事件里就可以了:void _ fastcall TForml:Button lClick(TObject*Send er)(获得CPU型号SYSTEMJNFO systeminfo;GetSystemlnfo(&systeminfo);
16、Memo 1 -*Lines-A dd(腌 PU 类型是:克攵旅 tring(systeminfo.d wProcessorType);)运行它,点击Test试试,CPU型号出来了吧!2.检测内存状态获 得 内 存 状 态 的 方 法 和 C P U 型号差不 多,只 是 他 用 到 的 是 另 外 一 个 API:GlobalMemoryStatuso其中,成员d wTotalPhys用来获得物理内存总量,而 d wAvailPhys顾名思义是有效物理内存的意思。我们只要把下面几行代码加到上面程序的后面就可以了(不用重做,下同):获得内存状态MEMORYSTATUS memory;memor
17、y.d wLength=sizeof(memory);初始化GlobalMemoryStatus(&memory);Memo 1 Lines-*Ad d(S 奈锢祚i圭姗?Mb):敢旅 tring(int(memory.d wTotalPhys/1024/1024);Memol Lines-Ad d(携渲锌捎媚诜娥?Kb):敢象 tring(int(memory./1024);怎 么 样,看 出 点 门 道 了 么?两 段 程 序 的 格 式 几 乎 一 模 一 样,其 实,GetSystemlnfoGlobalMemoryStatus还可以获得许多其他有关CPU和内存的信息,就按照上面的格式
18、去套就行了,更详细的资料可以去看C+Build er4的 Help。3.检测可用硬盘空间好了,经过前面两个简单问题的热身,我们来处理个稍微复杂的问题:我们知道安装程序大都有一个检测 硬 盘 空 间 的 过 程,那么这是怎么 实 现 的 呢?他 用 到 的 是 A P I函数GetDiskFreeSpace,这个函数输入一个参数:目标盘的路径;返回四个参数,依次是每簇的扇区数、每扇区的字节数、空闲的簇数、总簇数。假如我们需要检测C 盘的总容量和可用容量,那么可以把以下代码加到上面的程序中:获得C 盘可用空间DWORD sector,byte,cluster,free;long int frees
19、pace,total space;GetDiskFreeSpace(S:?§or,&byte,&free,&cluster);/获得返回参数totalspace=int(cluster)*int(byte)*int(sector)/1 024/1024;/计算总容量freespace=int(free)*int(byte)*int(sector)/1024/1024;/计算可用空间Memol fL in e sf Ad d(掣盘总空间(Mb):敷旅 tring(totalspace);Memol Linesf Ad d(擎盘可用空间(Mb):兑 攵 皴 tring(freespace)
20、;怎么样?现在可以自己做安装程序了吧!C+Build er如何响应消息及自定义消息Inprise(Borland)C+Build er I1,可以象在Delphi中一样响应消息,只是看起来要稍复杂一点。对于系统已定义的消息,可以直接响应:#d efine WM_MY_OPEN_CMDL1NE_FILE(WM_USER+1)/进程间通讯的自定义消息#d efine WM_MY_SEARCH_NODE(WM_USER+2)查找命令的自定义消息class TSomeForm:public TForm(类中的其它代码protected:消息的响应过程void _ fastcall OpenCmd Li
21、neFile(TMessage Message);void _ fastcall SearchDocumentNod e(TMessage Message);void _ fastcall GetWind owMinMaxInfo(TWMGetMinMaxInfo Message);以下通过宏定义实现消息的正确响应BEGIN_MESSAGE_MAPMESSAGE_HANDLER(WM_MY_OPEN_CMDLINE_FILE,TMessage,OpenCmd LineFile)MESSAGE_HANDLER(WM_MY_SEARCH_NODE,TMessage,SearchDocumentNo
22、d e)MESSAGE_HANDLER(WM_GETMINMAXINFO,TWMGetM inMaxinfo,GetWind owMinMaxIn fo)END_MESSAGE_MAP(TForm);/end class以下为实现代码void _ fastcall TSomeForm:OpenCmd LineFile(TMessage Message)直接通过消息结构传递参数LPSTR lpCmd Line=(LPSTR)Message.LParam;从 Message 中取得参数thisHand leCmd LineFile(lpCmd Line);处理命令行的参数return;)void
23、_ fastcall TSomeForm:SearchDocumentNod e(TMessage Message)响应查找消息/Message中的参数在此处不需要。this-SearchNod e();return;)void _ fastcall TSomeForm:GetWind owMinMaxInfo(TWMGetMinMaxInfo Message)设置主窗口的最小尺寸MINMAXINFO*MinMaxInfo=Message.MinMaxInfo;MinMaxInfo-ptMinTrackSize.x=400;MinMaxInfo-ptMinTrackSize.y=300;ret
24、urn;)其中:TMessage和 TWMGetMinMaxInfo类型的定义可参见:C:Program FilesBorland CBuild erinlucd evclMessages.hpp;其它的消息响应方法与此相同。另外,可以为自定义的消息也定义,个对应的消息结构(如:TSearchNod e_Message),至于如何定义消息结构,可以参考:C:Program FilesBorland CBuild erinlucd evclMessages.hpp利用C+Build er开发动画DLL我们在Wind ows98环境下执行拷贝文件、查找文件或计算机等耗时比较长的操作时,Wind o
25、ws会显示一个小小的动画,指示正在进行的操作,与死板的静止图像相比增色不少。那么我们自己开发软件时,能否也显示一个这样的动画提示呢?我在开发一个外贸应用软件系统时,遇到的数据量很大,当通过复合条件查找时,因为不是数据库表的每个项目都有索弓 I,所以很费时,系统也会表现出长时间停顿,用户感觉极为不爽。我经过一段时间的探索,开发了一个能够在采用的开发环境PowerBuild er下调用的动画D L L,由于采用多线程编程,PB调用的DLL函数能够及时将控制权交还为P B,不影响应用系统的运转。用户能够看到一个东西在动,也就不会想到系统是不是停止响应了,感觉时间也似乎没那么久了。代码与编译选项(1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Builder 资料库
限制150内