C++Builder的60个编程资料.pdf
《C++Builder的60个编程资料.pdf》由会员分享,可在线阅读,更多相关《C++Builder的60个编程资料.pdf(104页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+Builder的 60个编程资料6、用C+Builder 3 制作屏幕保护程序7、TCP/IP头格式8、UDP9,判断windows的Desktop及其它目录10、取得本地internet机器的名字及IP地址11、Jlj C+Builder创建数字签名12、用 Enter键控制焦点切换的方法13、拦 截 Windows消息14、使用 CommaText15、程序开始时先显示信息框16、怎样获取程序的命令行参数?17、如何监视剪贴板18、加何使用Onldle事件19、用 C+Builder编写出行异步通信程序20、C+BUILDER非可视组件的消息处理技巧21、用 C+Builder建立数据
2、库VCL使用经验22、用 C+Builder 创建基 J Internet 的点对点 Chat23、用 C+Builder获取应用程序图标24、BIG5到GB的转换技术25、C+BUILDER让你的任务栏图标动起来26、TFORM27、用 BCBa windows臬而创建快捷方式28、读磁片磁区29、I/O 端口读写的实现30、检测区标位置3 1,令Win32应用程序跳入系统零层32、如何取得Memo的行和列33、使用 Sockets34、Windows95/98下把样隐藏应用程序不止它出现在CTRL-ALT-DEL对话框中?35、怎样照藏质用程序的任务条图标36、编写自己的Ping.exe程
3、序37、用 C+Builder 在 WINNT 卜编制 个 Service38、如何在C+BUILDER中自动关闭WINDOWS屏保39、显示/陶敏任务栏图标40、信箱监视程序41、C+Building 制作闹钟42、拨号上网IP地址的检知43、用 C+Builder 编 Tray 程序44、怎样用代码来最小化或恢复程序45、制作主窗口显示前的版权窗U46、判断是否已经联到internet47、获取登砧用户名48、隐藏桌面图标49、程序启动时运行50、控制面板的调用51、模拟键盘按键52、让标题栏闪烁53、后动屏箱保护54、年月日星期的取法55、键俄事件56、照藏任务栏57、禁止关机58、怎样
4、以最小化方式启动程序59、在Memo中增加,行后,如何使展后一行能显示6 0 s设置壁纸方法1、怎样在C+Builder中创建使用DLL自从C+Builder从去年浪漫情人节上市以来.吸引了大展的Delphi、VC、Vb的程序员到它的怀抱,大址的C、C+程序员感叹道:总算有了 C 的可视化开发工具,对我也是样,从BC.Delphi到C+Builder:动态链接库(DLL)是Windows编程常遇到的编程方法,卜而我就介绍 卜在BCB(C+Builder卜简称BCB)中如何创建使用DLL和 些技巧.一、创建:使用BCBF NEW建立一个新的DLL I程,并保存好文件B C B,生 成 个 DLL
5、的程序框架.1.DIIEntryPoint函数为 个入口方法,如果使用者在DLL被系统初始化或者注销时被调用,用来写入对DLL的初始化程序和蚓载程序:参数:hinst用来指小DLL的基地址;reason用来指示DLL的调用方式,用于区别多线程单线程对DLL的调用、创建、卸载DLL;2.在程序中加入自己所要创建的DLL过程、函数;3.用 dllimport 描述出口例程序如M include#pragma hdrstopextern C _ declspec(dllexport)int test();intWINAPI DIIEntryPoint(HINSTANCE hinst,unsigned
6、 long reason,void*)(return 1;)int test()(return 3;注意:动态链接库中谢用过程、函数时有不同的CALL方式 _cded、_pascal,_fastcalK _stdcall.BCB中默认的方式为_cdecl(可不写),如果考虑兼容性可用时_stdcall声明方法为:extern C _ declspec(dllexport)int _ stdcall test();对 r其中过程、函数也改为:int _ stdcall test()二、使用DLL在 BCB中使用DLL有两种方法:1.用静态调用法首先需要在BCB的项目中加入输入接口阐import
7、library),打开工程项目,使用BCB View|Project Manager打开项目列表,向项目中加入接口阵(*Jib)。其次在头文件中加入接口声明.例程序如K/define in include fileextern C _ declspec(dllimport)int _ cdecl test();/use function in main programinti:l=test();注意:动态链接库调用过程、函数时CALL方 式,创建时方式-样不写为_ c d e d,其它需要声明,(2)BCB 创建的 DLL 仃对应的输入接口库(import library)如只有 DLL 而无
8、库时,可用 BCB 的 implib I:具产4.:implib xxx.lib xxx.dll 另外可用 tlib xxx.lib.xxx.lst产牛.DLL的内部函数列表,许多Windows的未公开技术就是用这种方法发现的.2.动态调用法动态调用法要用Windows A P I中 的LoadLibrary()fll GetProcAddress。来调入DLL库,指出库中函数位置,这种方法较常见.例程序如F:HINSTANCE dd;int _stdcall(*ddd)(void);dd=LoadUbrary(xxx.dir);ddd=GetProcAddress(dd,tesr);Capt
9、ion=lntfbStr(dddO);FreeLibrary(dd);三、注意:创 建DLL时编译链接时注意设置Project Options?Packages 标签:去除 Builder with runtime packages 拉住Kt.Linker标签:去除Use dynamic RTL检杳机。否则创建的 DLL 需要 Runtime packages or Runtime library2、用C+Builder在WIN.INI中保存信息现在许多软件把程序中需要的数如;保存在注册表中,这样肖用户装的软件越来越多时,致使注册表越来越庞大,容易使系统出错。当然,微软也建议在注册表中保存数据
10、但当我们需要保存的数据不多时完全可以把数据保存在WIN.INIW,这样可以很方便地维护,实现方法相时来说比较简单“下而我以BorlandC+Builder为例来说说如何实现。原理K实很简单,只需调用API的WriteProfileString和GetProfilelnt函数就可以了“这两个函数的原型是:BOOL WriteProfileStringfLPCTSTR lpAppName,LPCTSTR IpKeyName.LPCTSTR IpString);UINT GetProfilelnt(LPCTSTR IpAppName.LPCTSTR IpKeyName.INT nDefault);其
11、 中IpAppName指在WINJNI中段的名字,即用口括起来的字符叫 IpKeyName指在这个段中每一个项目的名字,IpString指这个项目的值,即“=1后的数,nDefault为 当GetProfilelnt没 有 找 到IpAppName和IpKeyName时返网的值,即敏省他前者返问为布尔伊(true或false).后者返何为无符号整形值.当在WriteProfileString函 数 中IpKeyName为空(NULL)时,则消除这个段的全部内容,IpString为空时,则清除这一项目的内容,即这行将消除掉.下面举 例子来说明这两个函数的用法“新 建,个应用程序,在Form l上
12、放两个Edit和.个Button.其 中Edit的Text为空,.个Button的Caption分别为添加、-件看、“消除,双击“添加”按钮加入卜面代码:WriteProfileString(“例子程序”,项 FT.Edit1-*Text.c_str();双击“查看 按钮加入如F代码:unsigned int Temp;Temp=GetProfilelnt(“例子程序,项目,100);Edit2 Text=lntToStr(Temp);双廿清除”按钮加入如卜代码:WriteProfileStringC1 例子程序.NULL.NULL):然后按F 9犍运行程序。F来 可 以 检 胺 卜 程 序
13、的 正 确 恨 在 E d itl中输入数字,短 32 6 5,按 添加-按钮,这时运行“sysedit来查看-W IN.INf文件的股后|川,可以看到加入了如下内容:例子程序项目=3265其中。和“=是函数自动加上的。按下“佟右 按钮,在 Edit2中出现*3265”,当按卜“消除 按钮可消除添加的部分。经过杳看可知程序已达到预期的H 的。喜爱编程的朋友可以把上述方法应用到自己的程序中去,来达到保存数据信息的作用.当确实要把信息保存到注册表中,可 以 在 C+Builder中定义个 TRegistry类的时象来进行相关的操作,或者直接调用Windows的 A P I函数,具体如何编程大家可以
14、参阅相关资料或者同我联系。3、如 何 在 C+Builder中检测硬件在我们编写的程序中常隹要和硬件打交道,那么如何在程序中确定系统中是否仃该设备,它的运行状态乂是怎样的呢?对于初学者来说,这个问题常常不好解决,其实只需简单地利用儿个A P I函数.硬件的问题并不神秘”下面就让我们 起看看在C+Build e r中是如何检测硬件的.1.检 测 CPU的型号先让我们从殿简单的做起,看 下 自。的 C PU型号.首先,在 C+Builder中画出图1 所示的窗体,在下面的几个例子中我们将 直使川这个窗体作小范,它包括一个用来激活测试的Button和 个用来显示结果的Memo:我们可以用GetSys
15、temlnfo这 个 A P I获得CPU的型号.将卜列代码添加到Button的 Click事件里就可以了:void _ fastcall TForm1:Button1Click(TObject,Sender)(获得C PU型号SYSTEM_INFO systeminfo;GetSystemlnfo(&systeminfo);Memo1-Lines,Add(您的 CPU 类型是:+String(systeminfo.dwProcessorTy pe);运行它,点击Test试试,CPU型号出来了吧!2.检测内存状态获得内存状态的方法和C P U 型号差不多,只是他用到的是另外 个 API:Glo
16、balMe moryStatus.其 中,成 员 dwTotalPhys用来获笥物理内存总站而dwAvailPhys顾名思义是有效物理内存的意思。我们只要把卜面儿行代码加到上面程序的后面就可以了(不用重做,卜同):获行内存状态MEMORYSTATUS memory;memory.dwLength=sizeof(memory);初始化memory.dwLength=sizeof(memory):初始化GlobalMemoryStatus(&memory);Memo1-Lines-Add(您的物理内存:是(Mb):+String(int(memory.dw7btalPh ys/1024/1024)
17、;Memo1-Lines-Add(其中可用内存是(Kb):+String(int(memory.71024);怎么样,看出点门道了么?两段程序的格式儿乎 模 样.其 实,GetSystemlnfo和 GlobalMemoryStatus还可以获得许多其他仃关C PU和内存的信息.就按照上面的格式去套就行了,更详细的资料可以去看C+Builder4的 Help.3.检测可用硬盘空间好了,经过前而两个简单问题的热身,我们来处理一个稍微复杂的问题:我们知道安装程序大部仃个检测硬盘空间的过程,那么这是怎么实现的呢?他川到 的 是 A P I函数GetDiskFreeSpace,这个函数输入 个参数:目
18、标盘的路径:返回四个参数,依次是每簇的扇区数、每扇区的字节数、空闲的簇数、总赧数。假如我们需要检测C 盘的总容址和可用容量,那么可以把以下代码加到上面的程序中:获得C 盘可用空间DWORD sector.byte.duster,free;long int freespace,totalspace;GetDiskFreeSpace(C:,§or.&byte,&free,&cluster);获得返回参数totalspace=int(cluster)*int(byte)*int(sector)/1024/1024;计 算总容:;freespace=int(free)*int(byte)*in
19、t(sector)/1024/1024;H 獴可JIJ空间Memo1-Lines-Add(C 盘总空间(Mb):+String(totalspace);Memo1-Lines-Add(,C 盘可川空间(Mb):-+String(freespace);怎么样?现在可以自己做安装程序了吧!4.检测 CD-ROM我们在编写程序时常常需要读取CD R O M 可是究竟哪 个盘符是光驱呢?有人是梃佛佛?是光驱呢?有人??揩坡后一个盘符当作光驱的,但是名遇到双光驱或者MO的情况时常常会出错。其实这个问题用 个API来解决并不困难,这就是:GetDriveType().这个函数返回 个0-6 之间的值,依次
20、代表:0未知做、1 一不存在、2可移动磁盘、3固定破盘、4一网络破盘、5-CD-ROM,6内存虚拟盘.因此我们可以添加下面代码来J 找 CD-ROM:I I 获得CD-ROM信息UINT type;char name;for(name=C;name=Z;name+)循环检测 A-Z type=GetDriveType(String(name)+Smng(:).c_str();获得磁 盘类型if(type=5)Memo1-Lines-Add(您的光麻盘符为:+String(name);)得到光张盘符之后我们可以进一步利用API函数GetVolumelnformation检测光羯中是否有光盘,这个
21、函数如果成功调用,会得到磁盘的卷标序列号等信息;如果调用失败则可知光驱中无光盘.程序如下:检测光盘(假设光驱为G:)char volname255,filename100;/buffer512;DWORD sno.maxl.fileflag;if(!(GetVolumelnformation(G:I volname,255,&sno,&maxl,&fileflag.filename,100)如果返何l值为假Memo1-Lines-Add(G驳中没有发现光盘)else如果返回值为其Memol-Lines-Add(G 典中光盘卷标为:+String(volname);Memo1-Lines-Add
22、(G 眼中光盘序号为:+String(sno);)5.检测声K配置在编制多媒体程序时,我们常常会用到声音文件,而当这些程序在没有配置内卡的机器上运行时,我们应该给出必要的警告.对于声R的校测,可以分别通过 waveOutG etNumDevs。和 midiOutGetNumDevs()检测波形设备和 MIDI 设备,再利用 waveOutGetDevC aps()和 midiOutGetDevCaps()获得声i午设备的细节资札将下面一段代码加入上 面的程序即可,但要注意将#include添至程序首部:检测声卡int wavedevice,mididevice;WAVEOUTCAPS wave
23、cap;MIDIOUTCAPS midicap;wavedevice=(int)waveOutGetNumDevs();波 形 设 备 信 息 mididevice=(int)midiOutGetNumDevs():MIDI 设 备 信 息mididevice=(int)midiOutGetNumDevs();II MIDI 设备信息if(wavedevice=0)Memo1-Lines-Add(没有发现波形设备);elsewaveOutGetDevCaps(0,&wavecap,szeof(WAVEOUTCAPS):Memol-Lines-Add(当旃波形设备:+String(wavecap
24、.szPname);if(mididevice=O)Memol-Lines-Add(没有发现 MIDI 设备);elsemidiOutGetDevCaps(0,&midicap,sizeof(MIDIOUTCAPS);Memol9-Lines-Add(当前 MIDI 设备:+String(midicap.szPname);)6.检测品示器信息编写和图形图像仃关的程序时常常需要检测显示器的分辨率和色深,母后我们来看看这个问题的解决办法。分辨率的求法很简单.直接调用Screen对象的属性就行了而照求色深则要利用API函 数GetDeviceCaps获得每像素的比特数和色彩的页面数,然后计算2的“每
25、像素的比特数”次程即得色彩的梯度数,再计算 色彩的梯度数”的“色彩的页面数次籍即得色深:程 序如F:检测显示器int tcs;long int bpp.cp.tc;Memo1-Lines-Add(%前.分辨率为:+String(Screen-Width)+-M+S tring(Screen-Height);bpp=GetDeviceCaps(Form1-Canvas-Handle.BITSPIXEL);bpp=GetDeviceCaps(Form1-Canvas-Handle.BITSPIXEL);tcs=pow(2,bpp);计算色彩的梯度数cp=GetDeviceCaps(Form1-Ca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Builder 60 编程 资料
限制150内